Java中Spring獲得bean辦法小結。本站提示廣大學習愛好者:(Java中Spring獲得bean辦法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中Spring獲得bean辦法小結正文
Spring是一個輕量級的掌握反轉(IoC)和面向切面(AOP)的容器框架,若何在法式中獲得Spring設置裝備擺設的bean呢?
Bean工場(com.springframework.beans.factory.BeanFactory)是Spring框架最焦點的接口,它供給了高等IoC的設置裝備擺設機制。BeanFactory使治理分歧類型的Java對象成為能夠,運用高低文(com.springframework.context.ApplicationContext)樹立在BeanFactory基本之上,供給了更多面向運用的功效,它供給了國際化支撐和框架事宜系統,更容易於創立現實運用。我們普通稱BeanFactory為IoC容器,而稱ApplicationContext為運用高低文。但有時為了行文便利,我們也將ApplicationContext稱為Spring容器。
關於二者的用處,我們可以停止簡略劃分:BeanFactory是Spring框架的基本舉措措施,面向Spring自己;ApplicationContext面向應用Spring框架的開辟者,簡直一切的運用場所我們都直接應用ApplicationContext而非底層的BeanFactory。
ApplicationContext的初始化和BeanFactory有一個嚴重的差別:BeanFactory在初始化容器時,並未實例化Bean,直到第一次拜訪某個Bean時才實例目的Bean;而ApplicationContext則在初始化運用高低文時就實例化一切單實例的Bean。是以ApplicationContext的初始化時光會比BeanFactory稍長一些
本文不觸及經由過程 @Resource 、 @Autowired 主動注入,僅僅經由過程 ApplicationContext 獲得 Sping 設置裝備擺設文件中的 Bean 。
要獲得XML中設置裝備擺設的Bean,最症結的是獲得org.springframework.context.ApplicationContext
第一種獲得 ApplicationContext 的辦法:
import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");
或許
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
這類方法實例化applicationContext長短常耗時的,這類方法實用於采取Spring框架的自力運用法式,僅僅推舉應用在法式須要經由過程設置裝備擺設文件手工初始化Spring的情形。ApplicationContext的重要完成類是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默許從類途徑加載設置裝備擺設文件,後者默許從文件體系中裝載設置裝備擺設文件
例子:
public class BeanManager { private static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ; public static Object getBean(String beanId) { return context.getBean(beanId); } }
在 web.xml 中寫一個 servlet ,主動啟動, init 辦法中挪用一下 BeanManager
init() throws ServletException { BeanManager bm = new BeanManager();//可選的,為的是在 web 運用啟動的時刻就讓 spring 加載 bean 設置裝備擺設。 // 不然會在第一次挪用 BeanManager 的時刻加載,影響一次速度。 }
在 java 代碼中應用 BeanManager.getBean(String beanId); 來取得 bean 實例。
第二種獲得 ApplicationContext 的辦法: 經由過程Spring供給的對象類獲得ApplicationContext對象,專為web工程定制的辦法,推舉Web項目中應用。例如:
ServletContext servletContext = request.getSession().getServletContext(); ApplicationContext ac1 = WebApplicationContextUtils .getRequiredWebApplicationContext(ServletContext sc) ApplicationContext ac2 = WebApplicationContextUtils .getWebApplicationContext(ServletContext sc) ac1.getBean("beanId"); ac2.getBean("beanId");
經由過程javax.servlet.ServletContext 獲得到ApplicationContext實例對象,這意味著,必需應用到request、session等等。
如許,就不克不及把ApplicationContext對象設置為成員變量。須要在每一個詳細的辦法中經由過程request、session等獲得到ServletContext再獲得ApplicationContext實例。
是以,此辦法僅僅推舉應用在可以獲得到ServletContext對象的Web項目中,而且不須要將ApplicationContext對象界說為成員變量的情形下。
留意:當應用WebApplicationContextUtils獲得ApplicationContext實例時,須要在web.xml設置裝備擺設文件中添加org.springframework.web.context.ContextLoaderListener監聽器,不然獲得不到ApplicationContext對象,前往Null。
設置裝備擺設文件:web.xml
<!--ContextLoaderListener主動注入 applicationContext,經由過程 WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext())獲得 --> <!--Spring設置裝備擺設文件加載地位 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appContext.xml,/WEB-INF/spring/appInterceptor.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3. 繼續自籠統類ApplicationObjectSupport
籠統類ApplicationObjectSupport供給getApplicationContext()辦法,可以便利的獲得到ApplicationContext。Spring初始化時,會經由過程該籠統類的setApplicationContext(ApplicationContext context)辦法將ApplicationContext 對象注入。
4. 繼續自籠統類WebApplicationObjectSupport
經由過程繼續org.springframework.web.context.support.WebApplicationObjectSupport應用getWebApplicationContext() 獲得到org.springframework.web.context.WebApplicationContext因為Web運用比普通的運用具有更多的特征,是以WebApplicationContext擴大了ApplicationContext。WebApplicationContext界說了一個常量ROOT_WEB_APPLICATION_ CONTEXT_ATTRIBUTE,在高低文啟動時,WebApplicationContext實例即以此為鍵放置在ServletContext的屬性列表中,是以我們可以直接經由過程以下語句從Web容器中獲得WebApplicationContext:
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
5. 完成接口ApplicationContextAware
完成該接口的setApplicationContext(ApplicationContext context)辦法,並保留ApplicationContext 對象。Spring初始化時,會經由過程該辦法將ApplicationContext 對象注入。
第3、4、五種辦法都須要將類設置裝備擺設在 Spring 設置裝備擺設文件中:
<!--假定ApplicationContextTool為繼續或許完成了第3、4、五種辦法的詳細完成類--> <bean class="com.twovv.utils.ApplicationContextTool"></bean>
不然將獲得不到 ApplicationContext ,前往 Null 。
以上內容給年夜家引見了Java中Spring獲得bean辦法小結,願望年夜家愛好。