用FactoryBean让Spring配置动起来

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

看到不少朋友讨论 spring 配置时认为 spring 配置中只能静态的设置一些参数(典型情况如数据库配置, 定时器配置等)导致不方便, 其实 spring 已经提供了非常便利的方式来实现动态配置, 我们要做的只是实现一个自己的 FactoryBean , 来看一下 FactoryBean 接口的定义

代码

/**

* Interface to be implemented by objects used within a BeanFactory

* that are themselves factories. If a bean implements this interface,

* it is used as a factory, not directly as a bean.

*

* <p><b>NB: A bean that implements this interface cannot be used

* as a normal bean.</b> A FactoryBean is defined in a bean style,

* but the object eXPosed for bean references is always the object

* that it creates.

*

* <p>FactoryBeans can support singletons and prototypes, and can

* either create objects lazily on demand or eagerly on startup.

*

* <p>This interface is heavily used within the framework, for

* example for the AOP ProxyFactoryBean or JndiObjectFactoryBean.

* It can be used for application components, but this is not common

* outside of infrastrUCture code.

*

* @author Rod Johnson

* @author Juergen Hoeller

* @since 08.03.2003

* @see org.springframework.beans.factory.BeanFactory

* @see org.springframework.aop.framework.ProxyFactoryBean

* @see org.springframework.jndi.JndiObjectFactoryBean

*/

public interface FactoryBean {

/**

* Return an instance (possibly shared or independent) of the object

* managed by this factory. As with a BeanFactory, this allows

* support for both the Singleton and Prototype design pattern.

* <p>If this method returns <code>null</code>, the factory will consider

* the FactoryBean as not fully initialized and throw a corresponding

* FactoryBeanNotInitializedException.

* @return an instance of the bean (should not be <code>null</code>;

* a <code>null</code> value will be considered as an indication of

* incomplete initialization)

* @throws Exception in case of creation errors

* @see FactoryBeanNotInitializedException

*/

Object getObject() throws Exception;

/**

* Return the type of object that this FactoryBean creates, or <code>null</code>

* if not known in advance. This allows to check for specific types

* of beans without instantiating objects, for example on autowiring.

* <p>For a singleton, this should try to avoid singleton creation

* as far as possible; it should rather estimate the type in advance.

* For prototypes, returning a meaningful type here is advisable too.

* <p>This method can be called <i>before</i> this FactoryBean has

* been fully initialized. It must not rely on state created during

* initialization; of course, it can still use such state if available.

* <p>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航