最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法

 更新時(shí)間:2019年06月03日 10:28:27   作者:我想問(wèn)問(wèn)天  
這篇文章主要介紹了普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

引語(yǔ):

工作中有時(shí)候需要在普通的對(duì)象中去調(diào)用spring管理的對(duì)象,但是在普通的java對(duì)象直接使用@Autowired或者@Resource的時(shí)候會(huì)發(fā)現(xiàn)被注入的對(duì)象是null,會(huì)報(bào)空指針。我們可以簡(jiǎn)單的理解為spring是一個(gè)公司,它管理的對(duì)象就是它的員工,而普通的java對(duì)象是其他公司的員工,如果其他公司要找spring公司的員工一起共事沒(méi)有經(jīng)過(guò)spring公司的同意肯定是不行的。

解決方式:

方法一:如果這個(gè)普通對(duì)象可以被spring管理的話,最好是直接交給spring管理,這樣spring管理的bean中注入其他的bean是沒(méi)有問(wèn)題的。

方法二:當(dāng)我們的普通對(duì)象沒(méi)有辦法交給spring管理的時(shí)候,我們可以創(chuàng)建一個(gè)公共的springBeanUtil專門(mén)為普通對(duì)象提供spring的員工(有點(diǎn)像spring公司的外包部門(mén),把對(duì)象外包給其他公司使用,哈哈)。

@Service
public class SpringBeanUtil implements ApplicationContextAware {

  public static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext context) throws BeansException {
    applicationContext = context;
  }

  // 這里使用的是根據(jù)class類型來(lái)獲取bean 當(dāng)然你可以根據(jù)名稱或者其他之類的方法 主要是有applicationContext你想怎么弄都可以
  public static Object getBeanByClass(Class clazz) {
    return applicationContext.getBean(clazz);
  }
}

這個(gè)util呢,其實(shí)就是實(shí)現(xiàn)了ApplicationContextAware接口,有小伙伴要問(wèn)了這個(gè)接口是干嘛的?這里給出鏈接地址,ApplicationContextAware參考資料。然后我也將文檔中的解釋給摘錄過(guò)來(lái)了

public interface ApplicationContextAware extends Aware
Interface to be implemented by any object that wishes to be notified of the ApplicationContext that it runs in.
Implementing this interface makes sense for example when an object requires access to a set of collaborating beans. Note that configuration via bean references is preferable to implementing this interface just for bean lookup purposes.
This interface can also be implemented if an object needs access to file resources, i.e. wants to call getResource, wants to publish an application event, or requires access to the MessageSource. However, it is preferable to implement the more specific ResourceLoaderAware, ApplicationEventPublisherAware or MessageSourceAware interface in such a specific scenario.
Note that file resource dependencies can also be exposed as bean properties of type Resource, populated via Strings with automatic type conversion by the bean factory. This removes the need for implementing any callback interface just for the purpose of accessing a specific file resource.
ApplicationObjectSupport is a convenience base class for application objects, implementing this interface.

大概意思就是說(shuō)只要實(shí)現(xiàn)了ApplicationContextAware接口的類,期望被告知當(dāng)前運(yùn)行的applicationContext是什么。然后又說(shuō)了如果是想要獲取資源最好是用ResourceLoaderAware, ApplicationEventPublisherAware or MessageSourceAware 這幾個(gè)接口,最后還來(lái)了一句我們知道你們要使用這些接口,所以我們幫你弄了一個(gè)實(shí)現(xiàn)了這些接口的抽象類ApplicationObjectSupport(在spring-context的jar包中)。這里說(shuō)得很清楚要使用bean的話,實(shí)現(xiàn)ApplicationContextAware,因?yàn)槲覀冞@里不需要使用靜態(tài)資源之類的所以我們就不用spring為我們提供的ApplicationObjectSupport了,有興趣的可以自己研究下。

我們這里簡(jiǎn)單的看一下ApplicationContextAware類里面都有啥?

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

發(fā)現(xiàn)就一個(gè)方法,spring初始化的時(shí)候會(huì)將當(dāng)前的applicationContext傳給ApplicationContextAware的setApplicationContext方法,所以只要實(shí)現(xiàn)類將這個(gè)applicationContext拿到了,就可以通過(guò)class類型或者class的名稱來(lái)獲取到spring中的bean了。原理其實(shí)很簡(jiǎn)單吧。使用的時(shí)候我們可以調(diào)用spring中的bean。如下:

Test test = (Test) SpringBeanUtil.getBeanByClass(Test.class);

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

相關(guān)文章

  • java簡(jiǎn)單實(shí)現(xiàn)數(shù)組的增刪改查方法

    java簡(jiǎn)單實(shí)現(xiàn)數(shù)組的增刪改查方法

    這篇文章主要介紹了Java數(shù)組的增刪改查的示例,幫助大家更好的利用Java處理數(shù)據(jù),感興趣的朋友可以了解下,希望能給你帶來(lái)幫助
    2021-07-07
  • 如何在springMVC的controller中獲取request

    如何在springMVC的controller中獲取request

    這篇文章主要介紹了如何在springMVC的controller中獲取request,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java Spring Boot 集成Zookeeper

    Java Spring Boot 集成Zookeeper

    這篇文章主要介紹了Java Spring Boot 集成Zookeeper,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • spring之Bean的生命周期詳解

    spring之Bean的生命周期詳解

    本篇文章主要介紹了spring之Bean的生命周期詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • SpringBoot實(shí)現(xiàn)文件上傳接口

    SpringBoot實(shí)現(xiàn)文件上傳接口

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)文件上傳接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 在SpringBoot項(xiàng)目中使用Spring Cloud Sentinel實(shí)現(xiàn)流量控制

    在SpringBoot項(xiàng)目中使用Spring Cloud Sentinel實(shí)現(xiàn)流量控制

    隨著微服務(wù)架構(gòu)的流行,服務(wù)之間的調(diào)用變得越來(lái)越頻繁和復(fù)雜,流量控制是保障系統(tǒng)穩(wěn)定性的重要手段之一,它可以幫助我們避免因過(guò)載而導(dǎo)致的服務(wù)不可用,本文將介紹如何在Spring Boot項(xiàng)目中使用Spring Cloud Sentinel來(lái)實(shí)現(xiàn)流量控制,需要的朋友可以參考下
    2024-08-08
  • mybatis-plus批處理IService的實(shí)現(xiàn)示例

    mybatis-plus批處理IService的實(shí)現(xiàn)示例

    這篇文章主要介紹了mybatis-plus批處理IService的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • spring boot 2整合swagger-ui過(guò)程解析

    spring boot 2整合swagger-ui過(guò)程解析

    這篇文章主要介紹了spring boot 2整合swagger-ui過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel

    Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel

    這篇文章主要介紹了Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • 詳談Java中net.sf.json包關(guān)于JSON與對(duì)象互轉(zhuǎn)的坑

    詳談Java中net.sf.json包關(guān)于JSON與對(duì)象互轉(zhuǎn)的坑

    下面小編就為大家分享一篇Java中net.sf.json包關(guān)于JSON與對(duì)象互轉(zhuǎn)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12

最新評(píng)論

肇庆市| 永嘉县| 宁陕县| 万载县| 营山县| 宜君县| 岑溪市| 延津县| 北京市| 革吉县| 开封县| 平安县| 合山市| 凉城县| 河源市| 延边| 横峰县| 南郑县| 康保县| 东阿县| 延安市| 宜丰县| 自贡市| 吉木乃县| 洞口县| 庆城县| 刚察县| 阿瓦提县| 临沂市| 社旗县| 博野县| 大港区| 灌云县| 花垣县| 东安县| 宜阳县| 武平县| 滁州市| 延寿县| 通榆县| 布尔津县|