文章目录
- 一、组件注册
- 包扫描+组件注解
- 0)、 @ComponentScans
- 1)、 @RestController
- 2)、 @Srevice
- 3)、 @Rerpository
- 4)、@Component
- 导入第三方包里的组件
- 1)、@Configuration
- 1)、@Bean
- 1)、@Conditional(自定义条件类)
- @Import 快速给容器导入一个组件
- 1)、@Import
- 2)、interface ImportSelector
- 3)、ImportBeanDefinitionRegistrar
- 使用Spring提供的 FactoryBean
- 1)、interface FactoryBean<T>
- 二、Bean生命周期
- 创建
- 初始化
- 销毁
- 1)、相关注解和接口
- 1、指定初始化和销毁方法
- 2、实现初始化和销毁接口
- 3、JSR250
- 4、Bean后置处理器:BeanPostProcessor
- 2)、 Springd底层对BeanPostProcessor的使用
- 三、属性赋值
- @PropertySource
- @Value
- 四、自动装配
- 1)、 @Autowired
- @Qualifier:指定需要装配的bean id
- @Primary:优先装配该Bean
- 构造器、方法、属性同样支持,都是从容器中获取对应的Bean
- 2)、@Resource(JSR250规范)
- 3)、@Ingect(JSR330)
- 4)、xxxAware:把Spring底层组件自动注册到Bean中
- 5)、@Profile:根据环境配置给容器中注册组件
Spring官方文档
学习参考视频
一、组件注册
包扫描+组件注解
0)、 @ComponentScans
- @ComponentScan
- @ Filter
1)、 @RestController
- @ResponseBody
- @Controller
2)、 @Srevice
3)、 @Rerpository
4)、@Component
导入第三方包里的组件
1)、@Configuration
1)、@Bean
- @Scope:prototype、singleton、request、session
- @Lazy
1)、@Conditional(自定义条件类)
@Import 快速给容器导入一个组件
1)、@Import
2)、interface ImportSelector
3)、ImportBeanDefinitionRegistrar
使用Spring提供的 FactoryBean
1)、interface FactoryBean
- 默认获取工厂bean调用getObject
- 要获取工厂bean本身,需要在id前添加&
二、Bean生命周期
创建
- 单例模式:容器初始化
- 多礼模式:从容器中获取实例
初始化
- 对象创建完成,并赋值好属性之后
销毁
- 单实例:容器关闭的时候
- 多实例:容器不会管理这个Bean,需要自己手动调用
1)、相关注解和接口
1、指定初始化和销毁方法
- @Bean(initMethod=xxx, destroyMethod=xxx)
2、实现初始化和销毁接口
- interface InitializingBean
- interface DisposableBean
3、JSR250
- @PostConstruct
- @PreDestroy
4、Bean后置处理器:BeanPostProcessor
- interface BeanPostProcessor
- Bean初始化前执行postProcessBeforeInitialization,初始化后执行postProcessAfterInitialization
- 整个在Bean赋值完成之后
- ApplicationContextAware接口注入ApplicationContext的实现就是该处理器完成
2)、 Springd底层对BeanPostProcessor的使用
- Bean赋值
- 注入其他组件
- @Autowired
- 生命周期功能:注解、接口
三、属性赋值
@PropertySource
@Value
- 基本数值
- SpEL:#{}
- ${},取出配置【yaml、properties】文件中的值,需要先加载配置文件到环境中
四、自动装配
1)、 @Autowired
- 默认优先从容器中获取对应组件
- 如果容器中存在多个相同类型Bean,根据名称注入Bean
- required:true:必须,false:非必须
- 由【AutowiredAnnotationBeanPostProcessor】处理器实现
@Qualifier:指定需要装配的bean id
- 配合@Autowired使用
@Primary:优先装配该Bean
- 配合@Bean使用
构造器、方法、属性同样支持,都是从容器中获取对应的Bean
- 标在构造器上:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是默认从容器中装配
- 标在属性上,setf方法上
- 标在方法:@Bean+方法参数,参数从容器中获取
2)、@Resource(JSR250规范)
- 默认按照组件名称装配
- 不支持required
3)、@Ingect(JSR330)
- 需要引入pom依赖
- 不支持required
4)、xxxAware:把Spring底层组件自动注册到Bean中
- interface ApplicationContextAware
- interface BeanNameAware
- interface EmbeddedValueResolverAware
5)、@Profile:根据环境配置给容器中注册组件
- Dspring.profile.cative=test(test为环境变量)
- 代码方式,容器启动前设置号参数
1、 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
2、 annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“test”);
3、 annotationConfigApplicationContext.register(componentClasses);
4、 annotationConfigApplicationContext.refresh(); - 可以添加在方法上,也可以添加在类上