3 回答
TA贡献1859条经验 获得超6个赞
如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationContextAware接口。
如果容器外部的对象需要访问该容器,那么我已经对弹簧容器使用了标准的GoF单例模式。这样,您的应用程序中只有一个单例,其余都是容器中的所有单例bean。
TA贡献1824条经验 获得超5个赞
您可以实现ApplicationContextAware或只使用@Autowired:
public class SpringBean {
@Autowired
private ApplicationContext appContext;
}
SpringBean将ApplicationContext注入,在其中实例化此bean。例如,如果您的Web应用程序具有相当标准的上下文层次结构:
main application context <- (child) MVC context
并SpringBean在主上下文中声明,将注入主上下文;否则,如果在MVC上下文中声明,则会注入MVC上下文。
TA贡献1796条经验 获得超10个赞
我相信您可以使用SingletonBeanFactoryLocator。beanRefFactory.xml文件将保存实际的applicationContext,它将像这样:
<bean id="mainContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>../applicationContext.xml</value>
</list>
</constructor-arg>
</bean>
从任何地方从applicationcontext获取bean的代码都是这样的:
BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();
BeanFactoryReference bf = bfl.useBeanFactory("mainContext");
SomeService someService = (SomeService) bf.getFactory().getBean("someService");
Spring团队不鼓励使用此类和yadayada,但在使用该类的地方它非常适合我。
添加回答
举报