Spring提供了几个标志接口(marker interface),这些接口用来改变容器中bean的行为;它们包括InitializingBean
和DisposableBean
。实现这两个接口的bean在初始化和析构时容器会调用前者的afterPropertiesSet()
方法,以及后者的destroy()
方法。
实现org.springframework.beans.factory.InitializingBean
接口允许容器在设置好bean的所有必要属性后,执行初始化事宜。InitializingBean
接口仅指定了一个方法:
void afterPropertiesSet() throws Exception;
使用FactoryBean
定制实例化逻辑
工厂bean需要实现org.springframework.beans.factory.FactoryBean
接口。
FactoryBean
接口是插入到Spring IoC容器用来定制实例化逻辑的一个接口点。如果你有一些复杂的初始化代码用Java可以更好来表示,而不是用(可能)冗长的XML,那么你就可以创建你自己的FactoryBean
,并在那个类中写入复杂的初始化动作,然后把你定制的FactoryBean
插入容器中。
FactoryBean
接口提供三个方法:
-
Object getObject()
:返回一个由这个工厂创建的对象实例。这个实例可能被共享(取决于isSingleton()的返回值是singleton或prototype)。
-
boolean isSingleton()
:如果要让这个FactoryBean创建的对象实例为singleton则返回true,否则返回false。
-
Class getObjectType()
:返回通过getObject()方法返回的对象类型,如果该类型无法预料则返回null。
在Spring框架中FactoryBean
的概念和接口被用于多个地方;在本文写作时,Spring本身提供的FactoryBean
接口实现超过了50个。
最后,有时需要向容器请求一个真实的FactoryBean
实例本身,而不是它创建的bean。这可以通过在FactoryBean
(包括ApplicationContext
)调用getBean
方法时在bean id前加'&'
(没有单引号)来完成。因此对于一个假定id为myBean
的FactoryBean
,在容器上调用getBean("myBean")
将返回FactoryBean
创建的bean实例,但是调用getBean("&myBean")
将返回FactoryBean
本身的实例。
分享到:
相关推荐
3.5.1. Lifecycle接口 3.5.1.1. 初始化回调 3.5.1.2. 析构回调 3.5.2. 了解自己 3.5.2.1. BeanFactoryAware 3.5.2.2. BeanNameAware 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7....
3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 ...
3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 ...
FactoryBean FactoryBeanNotInitializedException FailFastProblemReporter FatalBeanException FieldError FieldRetrievingFactoryBean FileCopyUtils FileEditor FileSystemResource ...
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................