spring
通过@Component, @Repository , @Controller , @Service 标识,注册给 ioc 容器来管理对象的生命周期时。
@Bean 或 @Import
来把三方 class 注册 (导入) 给 Ioc 容器了。
@Bean
-
@Bean 就放在方法上,Spring 的 @Bean 注解用于告诉方法,产生一个 Bean 对象,然后这个 Bean 对象交给 Spring 管理。
-
@Bean 注解的另一个好处就是能够动态获取一个 Bean 对象,能够根据配置参数在方法的实现给出不同的 Bean 对象。
-
标识了 @Bean 注解的方法,Spring 只会调用一次,随后这个 Spring 将会将这个 Bean 对象放在自己的 IOC 容器中。
-
@Bean 注解在返回实例的方法上,如果未通过 @Bean 指定 bean 的名称,则默认与标注的方法名相同。
-
@Bean 注解默认作用域为单例 singleton 作用域,可通过 @Scope (“prototype”) 设置为原型作用域。
-
@Bean 注解注册 bean, 同时可以指定初始化和销毁方法,如 @Bean (name="testBean",initMethod="start",destroyMethod="cleanUp")。
@import
@Import 只能用在类上 ,@Import 通过快速导入的方式实现把实例加入 spring 的 IOC 容器中。
spring的注入方式
set方法注入
构造方法注入
成员变量注入
@Autowired
作用范围:构造器、成员变量、方法、参数、注解
@Autowired注解的required参数默认是true,表示开启自动装配
加上@Qualifier按名称装配
@Autowired会自动把相同类型的对象收集到集合中。
@Resource能用在:类、成员变量和方法上。
@Autowired是spring定义的注解,而@Resource是JSR-250定义的注解
@Resource
默认按名称自动装配
@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。
@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。
Spring-boot
@PropertySource
@PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过YAML解析器,配合自定义PropertySourceFactory实现解析YAML文件。
@ConfigurationProperties
@Scheduled
@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,需要配合@EnableScheduling使用
zhuanlan.zhihu.com/p/103994119
@ResponseBodyAdvice
@ExceptionHandler
@InitBinder
应用到所有的@RequestMapping注解方法,在其执行前初始化数据绑定器
@ModelAttribute
设置属性,属性值绑定到Model中,使全局@RequestMapping可以获得该值
@Transactional
Spring的声明式事务就是采用声明的方式来处理事务,用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。
默认配置下,spring 只有在抛出的异常为运行时 unchecked 异常时才回滚该事务,也就是抛出的异常为RuntimeException 的子类(Errors也会导致事务回滚),而抛出 checked 异常则不会导致事务回滚 。可通过 @Transactional rollbackFor进行配置。
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
@Transactional 实质是使用了 JDBC 的事务来进行事务控制的
@Transactional 基于 Spring 的动态代理的机制
spring 所有的事务管理策略类都继承自 org.springframework.transaction.PlatformTransactionManager 接口
1. value :主要用来指定不同的事务管理器;
主要用来满足在同一个系统中,存在不同的事务管理器。
比如在Spring中,声明了两种事务管理器txManager1, txManager2.然后,
用户可以根据这个参数来根据需要指定特定的txManager.
2. value 适用场景:在一个系统中,需要访问多个数据源或者多个数据库,
则必然会配置多个事务管理器的