Spring IOC(入門)

概念

Spring IOC(Inversion of Control):控制反轉;在傳統的程序設計過程中,當一個程序需要調用另外一個程序來完成功能的時候,通常是調用者來創建被調用者的實例,雖然這樣很簡單也很好理解,但是程序間的耦合性很高,會導致程序越來越臃腫。在Spring中創建被調用者不再是調用者自己來完成,而是利用java的反射機制,通過配置文件或註解來創建實例,因此被稱爲控制反轉。其中創建被調用者的工作由Spring來完成,注入調用者被稱爲依賴注入。

注入方式

1.使用構造方法提供

  • 這種注入方式,調用者需要有默認的構造函數

  • xml

 <bean id="" class="\調用者路徑\"  >
       屬性  
       <constructor-arg name="" value="\被調用者路徑\"></constructor-arg>
 </bean>

2.使用set方法提供

  • 需要在調用者中有被調用者的set方法,如:
  private IAccountDao accountDao;
  public void setAccountDao(IAccountDao accountDao) {
          this.accountDao = accountDao;
      }
  • set方法注入
 <bean id ="" class "\調用者路徑\">
 	<property name="" value="\被調用者路徑\"></property>
 </bean>

3.註解注入

  • 在xml中只需配置Spring創建容器時要掃描的包
 <context:componet-scan base-packge=""></context:componet-scan>

創建bean的三種方式

1.使用默認函數

<bean id="" class=""></bean>

2.使用普通工廠的方法

當我們想調用的類存在於jar包中,無法通過修改源碼的方式來提供默認構造函數,此時可以利用一個工廠類。

public class InstanceFactory {
    public IAccountService   getAccountService(){
        return new AccountServiceImpl();
    }
}
xml配置
<bean id = "instanceFactory" class = "工廠類路徑"></bean>
<bean id ="" factory-bean="instanceFactory" factory-method="getAccountService"></bean>

3.使用靜態工廠中的靜態方法

public class StaticFactory {
    //方法名與xml配置文件中的要一致
    public static IAccountService getAccountService() {
        return new AccountServiceImpl();
    }
}
<bean id="" class="工廠類的路徑" factory-method="getAccountService"></bean>

能注入的數據有三類

1.基本類型和String

<bean id="" class="com.xwj.service.impl.AccountServiceImpl2">
        <property name="name" value="Test"></property>
        <property name="age" value="19"></property>
</bean>

2.其他bean類型(在配置過程中或註解配置過的bean)

<bean id="" class="com.xwj.service.impl.AccountServiceImpl2">
        <property name="birthday" ref="now"></property>
</bean>

3.複雜類型和集合類型

<bean id="accountService3" class="com.xwj.service.impl.AccountServiceImpl3">
    	
        <property name="myStrs" >
            <array>
                <value>AAA</value>
                <value>BB</value>
                <value>C</value>
            </array>
        </property>

        <property name="myList" >
            <list>
                <value>AAA</value>
                <value>BB</value>
                <value>C</value>
            </list>
        </property>

        <property name="mySet" >
            <set>
                <value>AAA</value>
                <value>BB</value>
                <value>C</value>
            </set>
        </property>

        <property name="myMap" >
            <map>
                <entry key="testA" value="AAA"></entry>
            </map>
        </property>

        <property name="myPros" >
            <props>
                <prop key="testA">ccc</prop>
                <prop key="testB">bbb</prop>
            </props>
        </property>
</bean>

使用註解注入常見的註解

1.@Component(value=“指定id”)

  • 作用:把當前類對象存入到Spring容器中。
  • 常見的繼承類有@Service,@Controller,@Repository

2.用於注入數據:

  • Autowired
    • 作用:自動按照類型注入,當容器中有唯一的bean對象類型和要注入的變量類型匹配,就可以注入成功。
    • 出現的位置:變量、方法
  • @Qualifier
    • 作用:在按照類型注入的基礎上,在按照名稱注入,不能單獨給類成員實現注入,但可以給方法參數實現注入
    • 屬性:value:用於指定注入bean的id
  • @Resource
    • 作用:直接按照bean的id注入,可以單獨使用
    • 屬性:name:用於指定bean的id
  • 以上的三個註解只能對其他的bean類型實現注入,基本類型和String無法使用上述註解實現注入,複雜類型和集合類型必須使用XML實現
  • @Value
    • 作用:用於注入基本類型和String類型的數據
    • 屬性:value:用於指定數據的值
  • @Scope
    • 作用:用於指定bean的作用範圍
    • 屬性:value :singleton(單例),prototype(多例)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章