Spring框架(第二天)
一、 註入
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
- //用於書寫復雜對象的創建過程的代碼,並將創建的復雜對象返回
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框架(第二天)