本文包含以下内容:
指定生命周期函数调用
断点逐步调试,观察BeanPostProcessor 执行原理
@Value 属性赋值、@PropertySource 引入参数
自动注入、复杂环境下自动注入
自动注入复杂用法、以及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-
可以关注我的公众号,免费获取价值1980元学习资料
点击“在看”,学多少都不会忘~