1. 程式人生 > >Spring框架(第二天)

Spring框架(第二天)

boolean 反射 rman pro actor . jdk 文件 開源框架 優勢

一、 註入

a) set

  i. JDK

    1.八種基本類型(+包裝類)+String

      

<bean id="User" class="com.dsl.test2.User">
    <property name="age">
        <value>18</value>
    </property>
    <property name="name">
        <value>dsl</value>
    </property>
</bean>

    2.數組

      

<list>
    <value>1111</value>
    <value>2222</value>
    <value>3333</value>
</list>

    3.List

<list>
    <value>1111</value>
    <value>2222</value>
    <value>3333</value>
</list>

  

    4.Set

<set>
    <value>aaa</value>
    <value>bbb</value>
    <value>ccc</value>
</set>

    5.Map

<map>
    <entry>
        <key><value>001</value></key>
        <value>dsl</value>
    </entry>
    <entry>
        <key><value>002</value></key>
        <value>dsl2</value>
    </entry>
</map>

    6.Properties 集合HashTable的子類 類似於Map<String,String>

    

<property name="age" value="18"/>
<property name="name" value="dsl"/>

  ii. 自定義類型(程序員自己定義+開源框架提供的類型) 成員變量註入

  

UserService{
   UserDao ud;        
}



//spring配置文件
    <bean id="UserDao" class="xxx.UserDao"/>
    <bean id="UserService class="xxx.UserService">
        <property name="ud">
                   <ref local="UserDao"/>
        </property>
    </bean>

    

b) 構造

<constructor-arg>
    <value>18</value>
</constructor>
<constructor-arg>
    <value>dsl</value>
</construcyor>

  根據標簽的個數, 自動匹配對應的構造方法

  註意:構造重載

  構造方法參數不同

  通過標簽個數匹配構造方法

  構造方法參數相同

  通過為標簽體檢type屬性 區分調用哪個類型的構造方法

<constructor-arg type="int">
    <value>18</value>
</constructor-arg>

二、 目的為成員變量賦值,優勢是:解耦和

三 、Spring創建對象和註入的原理

  a) 創建對象

    <bean id="User" class="xxx.User"/> User{int age;String name}

      1.讀取配置文件,加載類信息

      2.通過反射創建對應類的對象,反射調用無參構造函數。

  b) 註入

<bean id=”User” class=”xxxx.User”>
    <property name=”age”>
         <value>18</value>
    </property>
    <property name=”name”>
         <value>dsl</value>
    </property>
</bean>
User user =new User();
user.setAge(18);
user.setName(“dsl”)

四、FactoryBean技術

 對象(簡單對象 可以通過構造方法直接創建的對象)

對象(復雜對象 不能通過構造方法直接創建的對象,由若幹步驟組成)

  Connection :

     Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver

    Connection conn = DriverManager.getConnection();

  SqlSession:

    Resources.getResourceAsStream(“Myabtis-config.xml”)

    New SqlSessionFactoryBuilder().build(is);

    Ssf.openSession()

 a) FactoryBean開發過程

  i. 類 實現 FactoryBean接口: class ConnectionFactoryBean implements FactoryBean

ii. 覆蓋接口中的所有方法 FactoryBean 方法有3 

  1. //用於書寫復雜對象的創建過程的代碼,並將創建的復雜對象返回

    public Object getObject(){

    Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver

    Connection conn = DriverManager.getConnection();

    return conn;

    }

  2.//用於返回復雜對象的實際類型

    public Class getObjectType(){

    return Connnection.class

    }

  

  3.//用於控制復雜對象的創建次數

    public Boolean isSingleton(){

    return true;//工廠只會創建一次當前對象 SqlSessionFactory

    return false;//每次創建一個新的對象 connection

    }

  iii.配置文件進行配置

    <bean id=”conn” class=”xxx.ConnectionFactoryBean”/> Connection

    獲取復雜對象:

    Connection conn = (Connection)ApplicationContext.getBean(“conn”);

 

    註意:如果創建的是復雜對象(實現了FactoryBean接口),通過bena標簽ID值獲取的對象就是要創建的復雜對象

        1、 isSingleton方法返回值怎麽確定 看需求 根據對象的特點定

        2、 獲取ConnectionFactoryBean類的對象?

          ConnectionFactoryBean cfb = (ConnectionFactoryBean)ApplicationContext.getBean(“&conn”);

   

    

    

Spring框架(第二天)