1. 程式人生 > 其它 >DP狀態機

DP狀態機

Bean

一、Bean 是啥

  1. bean 是物件,一個或多個不限定。
  2. bean 由 Spring 中一個叫 IOC 的東西管理。
  3. 我們的程式由一個個 bean 組成。

二、Bean 分為兩類

2.1、註冊 Bean

把你要例項化的物件轉換成一個 Bean,放在 IOC 容器中。

註解 註冊:

  • @Component
  • @Repository
  • @Controller
  • @Service
  • @Configuration
  • ....

XML 註冊:

<bean id="beanId" class="com.xxx"/>

注意:

  • 必須確保 beanId 是全域性唯一不然會報錯。
  • 可以不設定 beanId
    ,但呼叫的時候就需要使用 類的全限定名。

2.2、使用 Bean

即是把已經在 配置類 或者 xml 檔案中配置好的 Bean 拿來使用,完成屬性、方法的組裝。

  • 通過 byType@Autowired) 獲取 IOC 容器中的 Bean。
  • 通過 byName@Resource)獲取 IOC 容器中的 Bean。

詳細


三、Bean 作用域

  1. 單例模式(Spring 預設機制)

    <bean id="..." class="..." scope="singleton"/>
    
  2. 原型模式:每次從容器中 get 的時候,都會產生一個新物件!

    <bean id="..." class="..." scope="prototype"/>
    
  3. Web 使用的作用域

    1. request:在一次請求中建立,建立完失效

      <bean id="..." class="..." scope="request"/>
      
    2. session:一直在 session 中活著

      <bean id="..." class="..." scope="session"/>
      
    3. application:在 全域性中活著


四、Bean 的自動裝配

自動裝配就是指 Spring 容器可以自動裝配(autowire)相互協作的 Bean 之間的關聯關係。
簡化就是:將一個 Bean 注入其它 Bean 的 Property 中。

在 Spring 中有三種裝配的方式

  1. 在 xml 中顯示的配置
  2. 在 java 中顯示配置
  3. 隱式 的自動裝配 bean
    • 在 XML 檔案中使用 autowire 屬性即可。

4.1、XML 配置檔案裝配

實體類

public class People{

    private Cat cat;

    public People(){}

    public People(Cat cat){
        this.cat = cat;
    }

    public void setCat(Cat cat){
        this.cat = cat;
    }

    public Cat getCat(){
        return cat;
    }

    @Override
    public String toString(){
        return "People{cat="+
                cat +
                '}';
    }
}

1、byName自動裝配

  • byName:會自動在容器上下文中,查詢和 注入類中的 set() 名相同的 beanId 並注入。
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byName"/>
  • 注意:
    • 被注入類的 beanId 可以隨便起,但必須和 注入類中的 set() 名相同。

2、byType 自動裝配

  • byType:會自動在容器上下文中,查詢和 注入類中的 set() 引數名相同的 類名。
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byType"/>
  • 注意:
    • 必須保證 Spring 容器中類的 全限定名 唯一。
    • 包名不一樣、類名一樣的話,set() 引數型別是哪個就注入那個。

3、constructor 自動裝配

  • constructor:會自動在容器上下文中,查詢和 注入類中的 有參構造器 引數型別
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="constructor"/>
  • 注意:
    • 被注入屬性的 型別 和 個數必須 注入類中的 有參構造器 引數相同。

4.2、半註解實現自動裝配

1. @Resource

詳細

  • 實體類
public class People {

    @Resource
    private Cat cat;

    @Override
    public String toString(){
        return "People{" +
        "cat=" + cat +
        '}';
    }
}
  • xml 配置檔案
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>

2. @Autowired

詳細

  • 實體類
public class People {

    @Resource
    private Cat cat;

    @Override
    public String toString(){
        return "People{" +
        "cat=" + cat +
        '}';
    }
}
  • xml 配置檔案
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>

  • 同一個類在 Spring 容器中註冊兩次
    • 一個有 beanId 一個沒有 beanId,自動裝配會報錯。
    • 如果其中有一個 beanId 和 繫結註解的屬性名 一樣就可以。