程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中Spring獲得bean辦法小結

Java中Spring獲得bean辦法小結

編輯:關於JAVA

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辦法小結,願望年夜家愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved