概述
spring boot
虽然帮我们把bean
的依赖注入基本都默认配置好了;但有些时候,业务场景中一些对象实例不在spring
生命周期中,但是对象中的属性又需要被spring
依赖注入(属性在spring
容器管理中);
比如一些servle
的filter
类,其中的一些属性又需要依赖一些spring
的bean
我遇到的情况是这样的,实现FactoryBean
接口获取到的自定义bean
因为没有参与spring
中bean
的初始化,所以FactoryBean.getBean
获取到的bean
是没有经过spring
的依赖注入的,也就是bean
里需要注入的属性都是空的
这个时候可以使用AutowireCapableBeanFactory
对刚刚制造出来的对象手动让它经过spring
的依赖注入
常用方法简述
org.springframework.beans.factory.config.AutowireCapableBeanFactory
-
autowireBean(Object existingBean)
功能:自动装配给定的现有
Bean
。此方法会尝试根据现有的依赖关系自动装配Bean
的属性。
参数:existingBean
- 需要自动装配的现有Bean
对象。 返回值:无。
和autowireBeanProperties
的区别在与autowireBean
方法会尝试对整个bean
进行自动装配。这意味着它不仅会对bean
的属性进行装配,还会处理任何实现了特定接口(如BeanNameAware
,ApplicationContextAware
等)的方法调用。此外,它还会调用initializeBean
方法,这通常包括调用任何被标记为@PostConstruct
的方法,即autowireBean
提供了完整的bean
初始化流程 -
autowireBeanProperties(Object existingBean, int autowireMode, boolean dependent)
功能:自动装配给定的现有Bean
的属性,使用指定的自动装配模式和依赖标志。
参数:existingBean
- 需要自动装配的现有Bean
对象。
autowireMode
- 自动装配模式,如AUTOWIRE_BY_NAME 或 AUTOWIRE_BY_TYPE
。
dependent
- 是否将现有Bean
标记为依赖于自动装配过程中创建的任何其他Bean
。 如果标记为true
,则依赖的父bean
销毁的时候也会销毁当前bean
返回值:无。 -
initializeBean(Object existingBean, String beanName)
功能:初始化给定的现有
Bean
。这通常包括调用Aware
接口的方法(如果实现了的话),以及调用任何@PostConstruct
注解的方法。
参数:existingBean
- 需要初始化的现有Bean
对象。beanName - Bean
的名称。
返回值:初始化后的Bean
。 -
applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
功能:在Bean
初始化之后,应用所有已注册的BeanPostProcessor
实例的
postProcessAfterInitialization
方法。
参数:existingBean
- 需要处理的现有Bean
对象。beanName - Bean
的名称。
返回值:处理后的Bean
。 -
applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)
功能:在Bean
初始化之前,应用所有已注册的BeanPostProcessor
实例的
postProcessBeforeInitialization
方法。
参数:existingBean
- 需要处理的现有Bean
对象。beanName - Bean
的名称。
返回值:处理后的Bean
。 -
createBean(String beanName, Class<?> beanClass, Object... args)
功能:创建一个新的Bean
实例,并使用给定的构造函数参数进行初始化。
参数:beanName
- 新Bean
的名称。
beanClass - Bean
的类。
args
- 构造函数参数。
返回值:创建的新Bean
实例。 -
invokeInitMethods(String beanName, Object bean, Object[] specificArguments)
功能:调用Bean
的初始化方法,这通常是@PostConstruct
注解的方法或
<bean init-method="...">
配置中指定的方法。
参数:beanName - Bean
的名称。bean - Bean
的实例。specificArguments
- 初始化方法的特定参数。
返回值:无。 -
destroyBean(String beanName, Object bean)
功能:销毁给定的Bean
。这通常包括调用
@PreDestroy
注解的方法或<bean destroy-method="...">
配置中指定的方法。
参数:
beanName - Bean
的名称。bean - Bean
的实例。
返回值:无。