03 Spring框架 bean的屬性以及bean前處理和bean后處理


上一節我們給出了三個小demo,具體的流程是這樣的:

1.首先在aplicationContext.xml中添加<bean id="自定義id" class="包名.類名">。(還有兩種工廠配置)

2.其次寫一個自定義類,里面只包含一個系統輸出的show()。

3.使用

ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xml");

實例化Spring容器。

4.最后用 HelloWorld hw=(HelloWorld)context.getBean(“c1”);獲得對象,再使用對象hw調用show()方法測試對象是否創建: hw.show();

所以我們可以從上面的例子了解到,先寫一個類,然后在applicationContext.xml中添加<bean id="" class="">實例,然后在TestHelloWorld中測試調用。 
這個是ioc的最基本的一個流程。

接下來我們介紹bean的相關屬性: 

①bean在Spring中有兩種基本類型(這兩種比較常用,其他的我們不作介紹):singleton和prototype(單例和原型),Spring中默認使用單例,若請求為原型,那么Spring就會新建一個bean實例然后返回給程序。 

單例和原型可以在bean中用scope屬性設置 :

<bean id="" class="" scope="singleton/prototype"> 

單例和原型有哪些區別?

  (一)他們都能夠創建對象,但是單例創建的實例成功后能夠重復的使用(即如果已經創建成功,當請求需要再次建立已經創建的實例的話,Spring就檢查容器中是否存在這個實例,如果存在就使用已經創建的實例,如果沒有就新創建一個實例),而原型,每當有請求需要建創建實例的時候都需要新建一個實例(無論容器中是否存在相同已創建的實例)。

  (二)它們創建對象的時機不同,單例在默認在Spring主配置文件被加載的時候就會被創建,而原型則是需要使用的時候創建對象。

②指定對象的初始化方法(用來初始化對象),利用bean中的init-method指定

<bean id="" class="" init-method="">

 

③指定對象銷毀方法(想要指定必須要滿足實例組件為單例,並且調用 AbstractApplicationContext容器對象的ac.close觸發)

<bean id="" class="" destroy-method="">

 

④延時創建實例,使用lazy-init=“true”設定默認為false,實例不是立即創建,而是用到時用getBean方法調用創建(控制單例的創建時機)

<bean id="" class="" lazy-init="true">

 

什么事bean前處理,什么又是bean后處理: 

Spring提供了一個接口,我們可以定義一個類,實現這個接口,這個接口提供了兩個方法:

  • postProcessBeforeInitialization
  • postProcessAfterInitialization 

  分別會在對象的創建之前和創建之后調用, 
  實現這個接口可以幫助我們在一些情況下,在一個對象創建的前后添加一些日志和預處理,或者關閉處理。

  接下來我們就來看看這個接口怎么實現:

public class postProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String service) throws BeansException {
        System.out.println("after");
        return bean;//這里的返回必須為bean
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String service) throws BeansException {
        System.out.println("before");
        return bean;//這里的返回必須為bean
    }

}

上面的這個類實現了BeanPostProcessor接口並提供了bean前方法和bean后方法,兩個方法的參數都為我們想要生成的對象的引用。

想要使用這個方法,我們不僅需要定義這個類,還要在Spring主配置文件中注冊一下:

<bean class="beanBeforeAndAfter.postProcessor"/>

這樣在產生bean之間就會輸出before和after。

上面就是這個實現類的具體使用方法(省略了具體的bean對象產生配置)。

 

 

 

版權聲明:本文為博主原創文章,如需轉載請表明出處。 https://blog.csdn.net/qq_39266910/article/details/77745245

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM