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,但在使用該類的地方它非常適合我。
添加回答
舉報