读书人

在Spring BeanFactory器皿中管理两种b

发布时间: 2012-08-24 10:00:20 作者: rapoo

在Spring BeanFactory容器中管理两种bean
private Object doGetObjectFromFactoryBean(final FactoryBean factory, final String beanName, final boolean shouldPostProcess)throws BeanCreationException {AccessControlContext acc = AccessController.getContext();return AccessController.doPrivileged(new PrivilegedAction() {public Object run() {Object object;try {// getObject方法调用object = factory.getObject();}catch (FactoryBeanNotInitializedException ex) {throw new BeanCurrentlyInCreationException(beanName, ex.toString());}catch (Throwable ex) {throw new BeanCreationException(beanName, "FactoryBean threw exception on object creation", ex);}if (object == null && isSingletonCurrentlyInCreation(beanName)) {throw new BeanCurrentlyInCreationException(beanName, "FactoryBean which is currently in creation returned null from getObject");}if (object != null && shouldPostProcess) {try {object = postProcessObjectFromFactoryBean(object, beanName);}catch (Throwable ex) {throw new BeanCreationException(beanName, "Post-processing of the FactoryBean's object failed", ex);}}return object;}}, acc);}

当一个受Spring容器管理的bean? 如果实现了FactoryBean接口? 在bean实例化(getBean)阶段? Spring会调用该bean的getObejct方法 返回的不一定是自身的实例

Spring 框架中有很多FactoryBean?? 例如RmiProxyFactoryBean, SqlMapClientFactoryBean. LocalSessionFactoryBean等都是通过FactoryBean getObject方法驱动起来的.对bean的生产 修饰做了很好的封装。

读书人网 >软件架构设计

热点推荐