国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

普通對(duì)象使用spring容器中的對(duì)象

cpupro / 2874人閱讀

摘要:引語(yǔ)工作中有時(shí)候需要在普通的對(duì)象中去調(diào)用管理的對(duì)象,但是在普通的對(duì)象直接使用或者的時(shí)候會(huì)發(fā)現(xiàn)被注入的對(duì)象是,會(huì)報(bào)空指針。解決方式方法一如果這個(gè)普通對(duì)象可以被管理的話,最好是直接交給管理,這樣管理的中注入其他的是沒(méi)有問(wèn)題的。

引語(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);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74770.html

相關(guān)文章

  • 這樣講 SpringBoot 自動(dòng)配置原理,你應(yīng)該能明白了吧

    摘要:這里有一個(gè)參數(shù),主要是用來(lái)指定該配置項(xiàng)在配置文件中的前綴。創(chuàng)建一個(gè)配置類,里面沒(méi)有顯式聲明任何的,然后將剛才創(chuàng)建的導(dǎo)入。創(chuàng)建實(shí)現(xiàn)類,返回的全類名。創(chuàng)建實(shí)現(xiàn)類,實(shí)現(xiàn)方法直接手動(dòng)注冊(cè)一個(gè)名叫的到容器中。前言 小伙伴們是否想起曾經(jīng)被 SSM 整合支配的恐懼?相信很多小伙伴都是有過(guò)這樣的經(jīng)歷的,一大堆配置問(wèn)題,各種排除掃描,導(dǎo)入一個(gè)新的依賴又得添加新的配置。自從有了 SpringBoot 之后,咋...

    cc17 評(píng)論0 收藏0
  • Spring入門(mén)看這一篇就夠了

    摘要:甲乙交易活動(dòng)不需要雙方見(jiàn)面,避免了雙方的互不信任造成交易失敗的問(wèn)題。這就是的核心思想。統(tǒng)一配置,便于修改。帶參數(shù)的構(gòu)造函數(shù)創(chuàng)建對(duì)象首先,就要提供帶參數(shù)的構(gòu)造函數(shù)接下來(lái),關(guān)鍵是怎么配置文件了。 前言 前面已經(jīng)學(xué)習(xí)了Struts2和Hibernate框架了。接下來(lái)學(xué)習(xí)的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創(chuàng)建Spring的...

    superw 評(píng)論0 收藏0
  • Spring入門(mén)IOC和AOP學(xué)習(xí)筆記

    摘要:入門(mén)和學(xué)習(xí)筆記概述框架的核心有兩個(gè)容器作為超級(jí)大工廠,負(fù)責(zé)管理創(chuàng)建所有的對(duì)象,這些對(duì)象被稱為。中的一些術(shù)語(yǔ)切面切面組織多個(gè),放在切面中定義。 Spring入門(mén)IOC和AOP學(xué)習(xí)筆記 概述 Spring框架的核心有兩個(gè): Spring容器作為超級(jí)大工廠,負(fù)責(zé)管理、創(chuàng)建所有的Java對(duì)象,這些Java對(duì)象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做依賴...

    wenyiweb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<