激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中Spring獲取bean方法小結(jié)

Java中Spring獲取bean方法小結(jié)

2020-03-21 12:13mrr JAVA教程

Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,如何在程序中獲取Spring配置的bean呢?下面通過本文給大家介紹Java中Spring獲取bean方法小結(jié),對spring獲取bean方法相關(guān)知識感興趣的朋友一起學習吧

Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,如何在程序中獲取Spring配置的bean呢?

Bean工廠(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高級IoC的配置機制。BeanFactory使管理不同類型的Java對象成為可能,應用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基礎之上,提供了更多面向應用的功能,它提供了國際化支持和框架事件體系,更易于創(chuàng)建實際應用。我們一般稱BeanFactory為IoC容器,而稱ApplicationContext為應用上下文。但有時為了行文方便,我們也將ApplicationContext稱為Spring容器。

對于兩者的用途,我們可以進行簡單劃分:BeanFactory是Spring框架的基礎設施,面向Spring本身;ApplicationContext面向使用Spring框架的開發(fā)者,幾乎所有的應用場合我們都直接使用ApplicationContext而非底層的BeanFactory。

ApplicationContext的初始化和BeanFactory有一個重大的區(qū)別:BeanFactory在初始化容器時,并未實例化Bean,直到第一次訪問某個Bean時才實例目標Bean;而ApplicationContext則在初始化應用上下文時就實例化所有單實例的Bean。因此ApplicationContext的初始化時間會比BeanFactory稍長一些

本文不涉及通過 @Resource 、 @Autowired 自動注入,僅僅通過 ApplicationContext 獲取 Sping 配置文件中的 Bean 。

要獲取XML中配置的Bean,最關(guān)鍵的是獲取org.springframework.context.ApplicationContext

第一種獲取 ApplicationContext 的方法:

?
1
2
3
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");

或者

?
1
2
3
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
private ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

這種方式實例化applicationContext是非常耗時的,這種方式適用于采用Spring框架的獨立應用程序,僅僅推薦使用在程序需要通過配置文件手工初始化Spring的情況。ApplicationContext的主要實現(xiàn)類是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默認從類路徑加載配置文件,后者默認從文件系統(tǒng)中裝載配置文件

例子:

?
1
2
3
4
5
6
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 方法中調(diào)用一下 BeanManager

?
1
2
3
4
init() throws ServletException {
BeanManager bm = new BeanManager();//可選的,為的是在 web 應用啟動的時候就讓 spring 加載 bean 配置。
// 否則會在第一次調(diào)用 BeanManager 的時候加載,影響一次速度。
}

在 java 代碼中使用 BeanManager.getBean(String beanId); 來獲得 bean 實例。

第二種獲取 ApplicationContext 的方法: 通過Spring提供的工具類獲取ApplicationContext對象,專為web工程定制的方法,推薦Web項目中使用。例如:

?
1
2
3
4
5
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監(jiān)聽器,否則獲取不到ApplicationContext對象,返回Null。

配置文件:web.xml

?
1
2
3
4
5
6
7
8
9
10
<!--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:

?
1
2
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

5. 實現(xiàn)接口ApplicationContextAware

實現(xiàn)該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 對象。Spring初始化時,會通過該方法將ApplicationContext 對象注入。

第三、四、五種方法都需要將類配置在 Spring 配置文件中:

?
1
2
<!--假定ApplicationContextTool為繼承或者實現(xiàn)了第三、四、五種方法的具體實現(xiàn)類-->
<bean class="com.twovv.utils.ApplicationContextTool"></bean>

否則將獲取不到 ApplicationContext ,返回 Null 。

以上內(nèi)容給大家介紹了Java中Spring獲取bean方法小結(jié),希望大家喜歡。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黑人一级片 | 吾色视频 | 国产日韩一区二区三区在线观看 | 精品久久久久久中文字幕 | 国产在线看一区 | 欧美日韩成人一区二区 | 91看片免费版 | 双性帝王调教跪撅打屁股 | 国产91精品久久久久久久 | 中文字幕精品在线播放 | 狼伊千合综网中文 | 在线视频观看一区二区 | 精品久久久久久久久久久久久久 | 失禁高潮抽搐喷水h | 成人免费毛片在线观看 | 欧美人与性禽动交精品 | 久久精品视频16 | 九九热免费精品 | 中文字幕在线观看精品 | 色视频在线播放 | 国产三级a三级三级 | 成人情欲视频在线看免费 | 国产麻豆久久 | 一级做受大片免费视频 | 国产一级免费av | 全黄性色大片 | 99精品视频免费看 | 精品久久久一二三区播放播放播放视频 | av电影在线播放 | 精品一区二区三区在线观看国产 | 国产 一区 精品 | 得得啪在线 | 亚洲一区二区三区日本久久九 | 日本在线免费观看 | av电影免费观看 | 亚洲国产精品久久久久久久久 | 久久99综合 | 国产高清美女一级毛片久久 | 亚洲小视频网站 | 欧美人与zoxxxx另类9 | 91精品国产91久久久久久丝袜 |