欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java類獲取Spring中bean的5種方式

 更新時(shí)間:2021年04月20日 11:57:16   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Java類獲取Spring中bean的5種方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

獲取Spring中的bean有很多種方式,再次總結(jié)一下:

第一種:在初始化時(shí)保存ApplicationContext對(duì)象

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");

說(shuō)明:這種方式適用于采用Spring框架的獨(dú)立應(yīng)用程序,需要程序通過(guò)配置文件手工初始化Spring。

第二種:通過(guò)Spring提供的工具類獲取ApplicationContext對(duì)象

import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");

說(shuō)明:

1、這兩種方式適合于采用Spring框架的B/S系統(tǒng),通過(guò)ServletContext對(duì)象獲取ApplicationContext對(duì)象,然后在通過(guò)它獲取需要的類實(shí)例;
2、第一種方式在獲取失敗時(shí)拋出異常,第二種方式返回null。

第三種:繼承自抽象類ApplicationObjectSupport

說(shuō)明:通過(guò)抽象類ApplicationObjectSupport提供的getApplicationContext()方法可以方便的獲取到ApplicationContext實(shí)例,進(jìn)而獲取Spring容器中的bean。Spring初始化時(shí),會(huì)通過(guò)該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對(duì)象注入。

第四種:繼承自抽象類WebApplicationObjectSupport

說(shuō)明:和上面方法類似,通過(guò)調(diào)用getWebApplicationContext()獲取WebApplicationContext實(shí)例;

第五種:實(shí)現(xiàn)接口ApplicationContextAware

說(shuō)明:實(shí)現(xiàn)該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext對(duì)象。Spring初始化時(shí),會(huì)通過(guò)該方法將ApplicationContext對(duì)象注入。

雖然Spring提供了后三種方法可以實(shí)現(xiàn)在普通的類中繼承或?qū)崿F(xiàn)相應(yīng)的類或接口來(lái)獲取Spring的ApplicationContext對(duì)象,但是在使用時(shí)一定要注意繼承或?qū)崿F(xiàn)這些抽象類或接口的普通java類一定要在Spring的配置文件(即application-context.xml文件)中進(jìn)行配置,否則獲取的ApplicationContext對(duì)象將為null。

下面通過(guò)實(shí)現(xiàn)接口ApplicationContextAware的方式演示如何獲取Spring容器中的bean:
首先自定義一個(gè)實(shí)現(xiàn)了ApplicationContextAware接口的類,實(shí)現(xiàn)里面的方法:

package com.ghj.tool;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringConfigTool implements ApplicationContextAware {// extends ApplicationObjectSupport{

 private static ApplicationContext ac = null;
 private static SpringConfigTool springConfigTool = null;

 public synchronized static SpringConfigTool init() {
 if (springConfigTool == null) {
  springConfigTool = new SpringConfigTool();
 }
 return springConfigTool;
 }

 public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
 ac = applicationContext;
 }

 public synchronized static Object getBean(String beanName) {
 return ac.getBean(beanName);
 }
}

其次在applicationContext.xml文件進(jìn)行配置:

復(fù)制代碼 代碼如下:
<bean id="SpringConfigTool" class="com.ghj.tool.SpringConfigTool"/>

最后通過(guò)如下代碼就可以獲取到Spring容器中相應(yīng)的bean了:
復(fù)制代碼 代碼如下:
SpringConfigTool.getBean("beanId");

注意一點(diǎn),在服務(wù)器啟動(dòng)Spring容器初始化時(shí),不能通過(guò)以下方法獲取Spring容器:

import org.springframework.web.context.ContextLoader; 
import org.springframework.web.context.WebApplicationContext; 
 
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 
wac.getBean(beanID);

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 關(guān)于Idea卡在Resolving Maven dependencies的解決方案

    關(guān)于Idea卡在Resolving Maven dependencies的解決方案

    本文詳細(xì)介紹了關(guān)于Idea卡在Resolving Maven dependencies的解決方案,文中通過(guò)圖文結(jié)合的形式給大家介紹的非常詳細(xì),對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • spring的13個(gè)經(jīng)典面試題

    spring的13個(gè)經(jīng)典面試題

    Spring框架是一個(gè)開放源代碼的J2EE應(yīng)用程序框架,是針對(duì)bean的生命周期進(jìn)行管理的輕量級(jí)容Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問(wèn)題,我們這篇文章就來(lái)了解一下spring的面試題
    2021-06-06
  • Java中的線程池ThreadPoolExecutor細(xì)致講解

    Java中的線程池ThreadPoolExecutor細(xì)致講解

    這篇文章主要介紹了Java中的線程池ThreadPoolExecutor細(xì)致講解,線程池是一種基于池化思想管理線程的工具,經(jīng)常出現(xiàn)在多線程服務(wù)器中,如MySQL,線程過(guò)多會(huì)帶來(lái)額外的開銷,其中包括創(chuàng)建銷毀線程的開銷、調(diào)度線程的開銷等等,需要的朋友可以參考下
    2023-11-11
  • Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫(kù)詳解

    Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫(kù)詳解

    這篇文章主要為大家詳細(xì)介紹了Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫(kù)的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot中JPA更新時(shí)部分字段無(wú)效

    SpringBoot中JPA更新時(shí)部分字段無(wú)效

    本文主要介紹了SpringBoot中JPA更新時(shí)部分字段無(wú)效,在通過(guò)注解自動(dòng)更新時(shí),部分字段在調(diào)試時(shí)可以找到,卻沒有被自動(dòng)更新到數(shù)據(jù)庫(kù)中,下面就介紹一下解決方法
    2023-04-04
  • IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案

    IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案

    這篇文章主要介紹了IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring依賴注入DI之三種依賴注入類型詳解

    Spring依賴注入DI之三種依賴注入類型詳解

    這篇文章主要介紹了Spring依賴注入DI之三種依賴注入類型詳解,通過(guò) @Autowired 注解,字段注入的實(shí)現(xiàn)方式非常簡(jiǎn)單而直接,代碼的可讀性也很強(qiáng),事實(shí)上,字段注入是三種注入方式中最常用、也是最容易使用的一種,需要的朋友可以參考下
    2023-09-09
  • MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名

    MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名

    這篇文章主要介紹了MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java字符串逆序方法詳情

    Java字符串逆序方法詳情

    這篇文章主要介紹了Java字符逆序,字符逆序主要原理就是將一個(gè)字符串str的內(nèi)容顛倒過(guò)來(lái),并輸出,下文操作分享需要的小伙伴可以參考一下
    2022-03-03
  • 帶你入門Java的集合

    帶你入門Java的集合

    Java的集合類型都是對(duì)java.util包中Collection接口的繼承,這里我們主要介紹依賴于collection的一些主分支,一起來(lái)看一下Java中的collection集合類型總結(jié)
    2021-07-07

最新評(píng)論