java之在普通程式碼中獲取bean的幾種方式
阿新 • • 發佈:2019-01-01
普通程式碼中獲取bean的幾種方式
最近在專案中,因程式碼模式要求,需要在普通類中去主動呼叫bean例項,經過參考分析,做如下的整理。
在初始化時儲存ApplicationContext物件 通過Spring提供的utils類獲取ApplicationContext物件 繼承自抽象類ApplicationObjectSupport 繼承自抽象類WebApplicationObjectSupport 實現介面ApplicationContextAware 通過Spring提供的ContextLoader
注意:通過繼承類或者實現介面都需要交給spring去託管,否則無法使用ApplicationContext物件
在初始化時儲存ApplicationContext物件
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("userService");
通過Spring提供的utils類獲取ApplicationContext物件
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
例項
public class MyServlet extends HttpServlet {
public void init() throws ServletException {
super.init();
ServletContext servletContext = getServletContext();
WebApplicationContext ctx =WebApplicationContextUtils.getWebApplicationContext(servletContext);
(Bean)ctx.getBean("bean" );
}
}
繼承自抽象類ApplicationObjectSupport
說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法。能夠方便的獲取ApplicationContext。
Spring初始化時。會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 物件注入。
繼承自抽象類WebApplicationObjectSupport
說明:類似上面方法。呼叫getWebApplicationContext()獲取WebApplicationContext
實現介面ApplicationContextAware
@Component
public class SpringContextUtil implements ApplicationContextAware {
/**
* Spring應用上下文環境
*/
private static ApplicationContext applicationContext;
/**
* 實現ApplicationContextAware介面的回撥方法。設定上下文環境
*
* @param applicationContext
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 獲取物件
*
* @param name
* @return Object
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
/**
* 獲取物件通過Class
*
* @param cls
* @return Object
* @throws BeansException
*/
public static <C> Object getBean(Class<C> cls) throws BeansException {
return applicationContext.getBean(cls);
}
通過Spring提供的ContextLoader
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);