色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析Spring中最常用的擴(kuò)展點(diǎn)(下)

jf_78858299 ? 來源:蘇三說技術(shù) ? 作者:蘇三說技術(shù) ? 2023-02-15 16:07 ? 次閱讀

7.修改BeanDefinition

Spring IOC在實(shí)例化Bean對象之前,需要先讀取Bean的相關(guān)屬性,保存到BeanDefinition對象中,然后通過BeanDefinition對象,實(shí)例化Bean對象。

如果想修改BeanDefinition對象中的屬性,該怎么辦呢?

答:我們可以實(shí)現(xiàn)BeanFactoryPostProcessor接口

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableListableBeanFactory;
        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
        beanDefinitionBuilder.addPropertyValue("id", 123);
        beanDefinitionBuilder.addPropertyValue("name", "蘇三說技術(shù)");
        defaultListableBeanFactory.registerBeanDefinition("user", beanDefinitionBuilder.getBeanDefinition());
    }
}

在postProcessBeanFactory方法中,可以獲取BeanDefinition的相關(guān)對象,并且修改該對象的屬性。

8.初始化Bean前后

有時(shí),你想在初始化Bean前后,實(shí)現(xiàn)一些自己的邏輯。

這時(shí)可以實(shí)現(xiàn):BeanPostProcessor接口。

該接口目前有兩個(gè)方法:

  • postProcessBeforeInitialization 該在初始化方法之前調(diào)用。
  • postProcessAfterInitialization 該方法再初始化方法之后調(diào)用。

例如:

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof User) {
            ((User) bean).setUserName("蘇三說技術(shù)");
        }
        return bean;
    }
}

如果spring中存在User對象,則將它的userName設(shè)置成:蘇三說技術(shù)。

其實(shí),我們經(jīng)常使用的注解,比如:@Autowired、@Value、@Resource、@PostConstruct等,是通過AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor實(shí)現(xiàn)的。

9.初始化方法

目前spring中使用比較多的初始化bean的方法有:

  1. 使用@PostConstruct注解
  2. 實(shí)現(xiàn)InitializingBean接口

9.1 使用@PostConstruct注解

@Service
public class AService {
    @PostConstruct
    public void init() {
        System.out.println("===初始化===");
    }
}

在需要初始化的方法上增加@PostConstruct注解,這樣就有初始化的能力。

9.2 實(shí)現(xiàn)InitializingBean接口

@Service
public class BService implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("===初始化===");
    }
}

實(shí)現(xiàn)InitializingBean接口,重寫afterPropertiesSet方法,該方法中可以完成初始化功能。

10.關(guān)閉容器前

有時(shí)候,我們需要在關(guān)閉spring容器前,做一些額外的工作,比如:關(guān)閉資源文件等。

這時(shí)可以實(shí)現(xiàn)DisposableBean接口,并且重寫它的destroy方法:

@Service
public class DService implements InitializingBean, DisposableBean {
 
    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean destroy");
    }
 
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean afterPropertiesSet");
    }
}

這樣spring容器銷毀前,會調(diào)用該destroy方法,做一些額外的工作。

通常情況下,我們會同時(shí)實(shí)現(xiàn)InitializingBean和DisposableBean接口,重寫初始化方法和銷毀方法。

11.自定義作用域

我們都知道spring默認(rèn)支持的Scope只有兩種:

  • singleton 單例,每次從spring容器中獲取到的bean都是同一個(gè)對象。
  • prototype 多例,每次從spring容器中獲取到的bean都是不同的對象。

spring web又對Scope進(jìn)行了擴(kuò)展,增加了:

  • RequestScope 同一次請求從spring容器中獲取到的bean都是同一個(gè)對象。
  • SessionScope 同一個(gè)會話從spring容器中獲取到的bean都是同一個(gè)對象。

即便如此,有些場景還是無法滿足我們的要求。

比如,我們想在同一個(gè)線程中從spring容器獲取到的bean都是同一個(gè)對象,該怎么辦?

這就需要自定義Scope了。

第一步實(shí)現(xiàn)Scope接口:

public class ThreadLocalScope implements Scope {
    private static final ThreadLocal THREAD_LOCAL_SCOPE = new ThreadLocal();

    @Override
    public Object get(String name, ObjectFactory objectFactory) {
        Object value = THREAD_LOCAL_SCOPE.get();
        if (value != null) {
            return value;
        }

        Object object = objectFactory.getObject();
        THREAD_LOCAL_SCOPE.set(object);
        return object;
    }

    @Override
    public Object remove(String name) {
        THREAD_LOCAL_SCOPE.remove();
        return null;
    }

    @Override
    public void registerDestructionCallback(String name, Runnable callback) {
    }

    @Override
    public Object resolveContextualObject(String key) {
        return null;
    }

    @Override
    public String getConversationId() {
        return null;
    }
}

第二步將新定義的Scope注入到spring容器中:

@Component
public class ThreadLocalBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        beanFactory.registerScope("threadLocalScope", new ThreadLocalScope());
    }
}

第三步使用新定義的Scope:

@Scope("threadLocalScope")
@Service
public class CService {
    public void add() {
    }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14338
  • AOP
    AOP
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    11098
  • IOC
    IOC
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    10099
收藏 人收藏

    評論

    相關(guān)推薦

    Spring框架的設(shè)計(jì)理念

    Spring作為現(xiàn)在最優(yōu)秀的框架之一,已被廣泛的使用,51CTO也曾經(jīng)針對Spring框架中的hqC應(yīng)用做過報(bào)道。本文將從另外一個(gè)視角試圖剖析Spring框架的作者設(shè)計(jì)
    發(fā)表于 07-15 08:17

    電路中最常見到的電容使用方法

    基于電容常用功能,詳細(xì)介紹各功能應(yīng)用電路中最常見到的電容使用方法
    發(fā)表于 03-17 08:08

    請問射擊探測器中最常用的口徑是什么?

    射擊探測器中最常用的口徑是什么?
    發(fā)表于 04-12 06:56

    開關(guān)電源中最常用的電阻有哪些呢

    一 電阻1.開關(guān)電源中最常用的電阻有貼片電阻、插件色環(huán)電阻、壓敏電阻、熱敏電阻等。2.貼片電阻2.1 貼片電阻:主要按封裝和功率來分,常用的有0402 1/16W; 0603 1/10W; 0805
    發(fā)表于 12-29 06:14

    單片機(jī)系統(tǒng)中最常用的通信協(xié)議有幾種

    )、MOSI(主機(jī)輸出從機(jī)輸入Master Output/Slave Input)和MISO(主機(jī)輸入從機(jī)輸出Master Input/Slave Output)。單片機(jī)系統(tǒng)中最常用的通信協(xié)議有三種,分...
    發(fā)表于 02-17 07:43

    單片機(jī)系統(tǒng)中最常用的三種通信協(xié)議是什么?

    單片機(jī)系統(tǒng)中最常用的三種通信協(xié)議是什么?
    發(fā)表于 02-17 06:03

    EMC問題中最常用的手段RC濾波詳細(xì)資料說明

    讓我們一起來看看處理 EMC 問題中最常用的手段 -RC 濾波。本文介紹了濾波的概念,并詳細(xì)說明了電阻 - 電容(RC)低通濾波器的用途和特性。
    發(fā)表于 12-25 07:08 ?8次下載
    EMC問題<b class='flag-5'>中最常用</b>的手段RC濾波詳細(xì)資料說明

    聯(lián)網(wǎng)應(yīng)用中最常用的傳感器是什么?

    環(huán)境、運(yùn)動、光電/圖像和健康監(jiān)測傳感器是物聯(lián)網(wǎng)應(yīng)用中最常用的傳感器類型
    的頭像 發(fā)表于 08-16 11:26 ?965次閱讀

    Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    除此之外,我們在使用spring的過程中,有沒有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。由于這個(gè)優(yōu)勢的存在,讓spring擁有強(qiáng)大的包容能力,讓很多第三方應(yīng)用能夠輕松投入spring的懷抱。比如:ro
    的頭像 發(fā)表于 01-11 10:31 ?886次閱讀

    剖析Spring中最常用擴(kuò)展點(diǎn)(上)

    我們一說到spring,可能第一個(gè)想到的是 `IOC`(控制反轉(zhuǎn)) 和 `AOP`(面向切面編程)。 沒錯(cuò),它們是spring的基石,得益于它們的優(yōu)秀設(shè)計(jì),使得spring能夠從眾多優(yōu)秀框架中脫穎而出。
    的頭像 發(fā)表于 02-15 16:06 ?748次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>Spring</b><b class='flag-5'>中最常用</b>的<b class='flag-5'>擴(kuò)展</b><b class='flag-5'>點(diǎn)</b>(上)

    剖析Spring中最常用擴(kuò)展點(diǎn)(中)

    我們一說到spring,可能第一個(gè)想到的是 `IOC`(控制反轉(zhuǎn)) 和 `AOP`(面向切面編程)。 沒錯(cuò),它們是spring的基石,得益于它們的優(yōu)秀設(shè)計(jì),使得spring能夠從眾多優(yōu)秀框架中脫穎而出。
    的頭像 發(fā)表于 02-15 16:06 ?503次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>Spring</b><b class='flag-5'>中最常用</b>的<b class='flag-5'>擴(kuò)展</b><b class='flag-5'>點(diǎn)</b>(中)

    基于spring的SPI擴(kuò)展機(jī)制是如何實(shí)現(xiàn)的?

    基本上,你一說是基于 spring 的 SPI 擴(kuò)展機(jī)制,再把spring.factories文件和EnableAutoConfiguration提一,那么這個(gè)問題就答的八九不離十了
    的頭像 發(fā)表于 03-07 09:17 ?1045次閱讀

    Spring中11個(gè)最常用擴(kuò)展點(diǎn)分享1

    在使用spring的過程中,我們有沒有發(fā)現(xiàn)它的擴(kuò)展能力很強(qiáng)呢?由于這個(gè)優(yōu)勢的存在,使得spring具有很強(qiáng)的包容性,所以很多第三方應(yīng)用或者框架可以很容易的投入到spring的懷抱中。今
    的頭像 發(fā)表于 05-11 10:48 ?555次閱讀

    Spring中11個(gè)最常用擴(kuò)展點(diǎn)分享2

    在使用spring的過程中,我們有沒有發(fā)現(xiàn)它的擴(kuò)展能力很強(qiáng)呢?由于這個(gè)優(yōu)勢的存在,使得spring具有很強(qiáng)的包容性,所以很多第三方應(yīng)用或者框架可以很容易的投入到spring的懷抱中。今
    的頭像 發(fā)表于 05-11 10:48 ?392次閱讀

    講一失效分析中最常用的輔助實(shí)驗(yàn)手段:亮點(diǎn)分析(EMMI)

    EMMI:Emission microscopy 。與SEM,F(xiàn)IB,EB等一起作為最常用的失效分析手段。
    的頭像 發(fā)表于 06-12 18:21 ?7027次閱讀
    講一<b class='flag-5'>下</b>失效分析<b class='flag-5'>中最常用</b>的輔助實(shí)驗(yàn)手段:亮點(diǎn)分析(EMMI)
    主站蜘蛛池模板: 啊片色播电影| 男女久久久国产一区二区三区| 色99久久久久高潮综合影院| 9277在线观看资源| 久久66热在线视频精品| 午夜宅宅伦电影网| 被吊起玩弄的女性奴| 暖暖日本在线手机免费完整版| 中文文字幕文字幕亚洲色| 含羞草免费完整视频在线观看| 无码欧美毛片一区二区三在线视频 | 欧美一区二区三区激情视频| 中文字幕亚洲乱码熟女在线| 精品亚洲一区二区在线播放 | 久久AV无码AV高潮AV不卡| 亚洲精品第一页| 国产久青青青青在线观看| 天天躁日日躁狠狠躁中文字幕老牛 | 国产人妻人伦精品久久无码| 桃花色影院| 国产成人精品电影在线观看| 日本视频中文字幕一区二区| 哺乳期妇女挤奶水36d| 青柠在线观看免费播放电影| WWW婷婷AV久久久影片| 暖暖视频中国在线观看免费韩国| 97视频免费上传播放| 免费视频xxx| 99精品免费久久久久久久久蜜桃| 免费毛片试看| free高跟丝袜秘书hd| 欧美写真视频一区| 边做边爱免费视频播放| 青青青青青青草| 第九色区av天堂| 挺进绝色老师的紧窄小肉六| 国产精品欧美一区二区在线看| 小黄文污到你湿| 黑人干亚洲人| 伊人久久大香| 麻豆一区二区免费播放网站|