您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Spring在代碼中如何獲取bean的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
方法如下
方法一:通過讀取XML文件反射生成對象 方法二:通過Spring提供的utils類獲取ApplicationContext對象 方法三:繼承自抽象類ApplicationObjectSupport 方法四:繼承自抽象類WebApplicationObjectSupport 方法五:實現接口ApplicationContextAware 方法六:通過Spring提供的ContextLoader
獲取spring中bean的方式總結:
方法一:通過讀取XML文件反射生成對象
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");ac.getBean("userService");//比如:<bean id="userService" class="com.cloud.service.impl.UserServiceImpl"></bean>
說明:這樣的方式適用于採用Spring框架的獨立應用程序,須要程序通過配置文件手工初始化Spring的情況。
方法二:通過Spring提供的工具類獲取ApplicationContext對象
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);ac1.getBean("beanId");ac2.getBean("beanId");
說明:這樣的方式適合于Spring框架的B/S系統,通過ServletContext對象獲取ApplicationContext對象。然后在通過它獲取須要的類實例。上面兩個工具方式的差別是,前者在獲取失敗時拋出異常。后者返回null。
方法三:繼承自抽象類ApplicationObjectSupport
說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法。能夠方便的獲取ApplicationContext。
Spring初始化時。會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對象注入。
方法四:繼承自抽象類WebApplicationObjectSupport
說明:類似上面方法。調用getWebApplicationContext()獲取WebApplicationContext
方法五:實現接口ApplicationContextAware
說明:實現該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 對象。Spring初始化時,會通過該方法將ApplicationContext對象注入。
下面是實現ApplicationContextAware接口方式的代碼,前面兩種方法類似:
public class SpringContextUtil implements ApplicationContextAware { // Spring應用上下文環境 private static ApplicationContext applicationContext; /** * 實現ApplicationContextAware接口的回調方法。設置上下文環境 * * @param applicationContext */ 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); } }
盡管,spring提供的后三種方法能夠實如今普通的類中繼承或實現對應的類或接口來獲取spring 的ApplicationContext對象,可是在使用是一定要注意實現了這些類或接口的普通java類一定要在Spring 的配置文件applicationContext.xml文件里進行配置。否則獲取的ApplicationContext對象將為null。
方法六:通過Spring提供的ContextLoader
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();wac.getBean(beanID);
最后提供一種不依賴于servlet,不須要注入的方式。可是須要注意一點,在server啟動時。Spring容器初始化時,不能通過下面方法獲取Spring 容器,細節能夠查看spring源代碼org.springframework.web.context.ContextLoader。
JUNIT測試時ContextLoader.getCurrentWebApplicationContext()=NULL
在JUNIT測試方法中加入以下代碼,正式環境不用
MockServletContext sc = new MockServletContext("");sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, "/applicationContext.xml");ServletContextListener listener = new ContextLoaderListener();ServletContextEvent event = new ServletContextEvent(sc);listener.contextInitialized(event);
感謝各位的閱讀!關于“Spring在代碼中如何獲取bean”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。