@autowired注解原理_Spring注解驱动开发之十一——第二阶段:Spring IOC 总结

65bc81ca22238916877f2d61d4604d39.png

本文包含以下内容:

  1. 指定生命周期函数调用

  2. 断点逐步调试,观察BeanPostProcessor 执行原理

  3. @Value  属性赋值、@PropertySource 引入参数

  4. 自动注入、复杂环境下自动注入

  5. 自动注入复杂用法、以及Aware、Profile 的讲解

1.指定生命周期函数调用

1)在Spring 中,可以通过 InitializingBean、 DisposableBean指定完成初始化、销毁的方法2)以及使用 @PostConstruct、@PreDestroy 两个注解标明调用Bean 创建前后的调用的方法 3)使用BeanPostProcessor  中2个方法postProcessBeforeInitialization 、postProcessAfterInitialization 可以做到Bean 创建之前、Bean 创建之后执行指定方法,这在Spring 中许多功能都是基于这个进行实现的。 具体可以看到文章: 《Spring注解驱动开发之六——@Bean指定初始化、销毁方法、BeanPostProcessor后置处理器》

2.断点逐步调试,观察BeanPostProcessor 执行原理

1)断点查看BeanPostProcessor  可以看到在 postProcessBeforeInitialization 之前Spring 会调用 populateBean()函数填充需要初始化的Bean 。 然后通过applyBeanPostProcessorsBeforeInitialization  和applyBeanPostProcessorsAfterInitialization 中间调用 invokeInitMethods(beanName, wrappedBean, mbd) ;进行 初始化 函数的调 用。 从而实现Bean 初始化前后调用BeanPostProcessor 接口 的实现方法postProcessBeforeInitialization和postProcessAfterInitialization2 )基于  BeanPostProcessor  通过查看你源码、测试等方式查看在Spring的应用场景ApplicationContextAwareProcessor、InitDestroyAnnotationBeanPostProcessor、BeanValidationPostProcessor  具体可以看到文章: 《Spring注解驱动开发之七——BeanPostProcessor 执行原理、在spring 中的应用》

3.@Value  属性赋值、@PropertySource 引入参数

1) @Value 对属性进行赋值,可填参数可以为1.基础类型、2. SpEL;#{} ,即sping 的表达式 3. ${};取出配置文件【properties】中的值2)@PropertySource 载入配置文件,并且可以通过上下文 getEnvironment()后  getProperty( "person.nickName" ) 获取配置文件的值,也可以配合@Value 进行取值 具体可以看到文章: 《Spring注解驱动开发之八——@Value属性赋值、@PropertySource 加载外部配置文件》

4.自动注入、复杂环境下自动注入

1) @Qualifier指定注入 ,即在注入时这个类,有多个实例化Bean ,可以指定Bean 的id 进行指定注入2) @Primary 指定默认首选, 即在注入时这个类,有多个实例化Bean ,优先注入 @Primary  标记的Bean3) @Autowired(required=false)  标明启动时不是必须注入的,可以避免启动时容器内没有该Bean 而报错无法启动。 具体可以看到文章: 《Spring注解驱动开发之九——@Autowired 自动注入、@Qualifier指定注入、@Primary 默认首选注入》

5.自动注入复杂用法、以及Aware、Profile 的讲解

1) @Resource、@Inject两个Java 规范层面的自动注入,区别与@Autowired 的自动注入 @Resource  为 JSR250 规范 中提出的 不支持 @Primary 和@Autowired(reqiured=false) @Inject 为JSR330 规范 中提出的注解,跟@Autowired 功能一致,不过需要额外引入 javax.inject 依赖 2) @Autowired 可以标注方法、构造器、参数,也可以配合@Bean 注解默认注入到参数中,即可以省略 @Autowired  注解3) Aware 获得Spring 的底层组件,举例说明了 ApplicationContextAware 获取IOC容器 BeanNameAware 获取 Bean 名称 EmbeddedValueResolverAware   字符串解析器等功能进行测试 4) @Profile配置不同的环境,以及通过JVM 参数、无参的IOC 容器构造方法,实现环境的切换  具体可以看到文章: 《Spring注解驱动开发之十——@Resource、@Inject 自动注入、Aware接口、@Profile环境配置》

-END-

6917417eb3829dac75aac1262b9c423c.png

可以关注我的公众号,免费获取价值1980元学习资料

点击“在看”,学多少都不会忘~

64db4cbb88413a54a3f057b2929ccecb.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值