1. 程式人生 > >03 Spring框架 bean的屬性以及bean前處理和bean後處理

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

and 設定 close https ali 註冊 override str return

上一節我們給出了三個小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

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