Spring依賴注入(構造引數注入、集合,陣列屬性注入、XML自動注入 ,全註解配置)
阿新 • • 發佈:2018-11-19
依賴注入
構造引數注入 --> 常用的是方案一和方案二 MyBean類 YouBean類
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 方案一:根據構造器引數的順序(索引)注入 索引開始為0 constructor-arg:構造器中的引數 index:引數位置 / name:引數名稱 / type:型別 value:引數的值 / ref:引用其它的bean --> <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg index="0" value="鄭清" /> <constructor-arg index="1" value="18" /> </bean> <!-- 方案二:根據構造器引數的名稱注入 注意:名稱必須一致 <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg name="name" value="鄭清" /> <constructor-arg name="age" value="18" /> </bean>--> <!-- 方案三:根據構造器的型別注入 <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg type="java.lang.String" value="鄭清" /> <constructor-arg type="java.lang.Integer" value="18" /> </bean> --> <!-- <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg value="鄭清" /> <constructor-arg value="46" /> </bean>--> <!-- 如果有一個引數是我們自己的一個物件,怎麼解決?? YouBean:為另外一個bean類 --> <!--方法一:先在外面定義 <bean id="youBean" class="com.zhengqing._02_constructor.YouBean" /> <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg value="鄭清" /> <constructor-arg value="18" /> <constructor-arg ref="youBean" /> </bean> 方法二:使用一個內部的Bean完成(不需要加id) <bean id="myBean" class="com.zhengqing._02_constructor.MyBean"> <constructor-arg value="鄭清" /> <constructor-arg value="18" /> <constructor-arg> <bean class="com.zhengqing._02_constructor.YouBean" /> </constructor-arg> </bean> --> </beans>
其它簡單、集合屬性注入 MyBean類
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="otherBean" class="com.zhengqing._03_di.OtherBean" /> <!-- property:屬性(setXxx) name:屬性名稱 value:屬性值 / ref:引入屬性值 --> <bean id="myBean" class="com.zhengqing._03_di.MyBean"> <property name="id" value="1" /> <property name="name" value="鄭清" /> <property name="sex" value="true" /> <property name="salary" value="10000" /> <!-- private List<OtherBean> otherBeanList; -有順,可以重複 --> <property name="otherBeanList"> <list> <ref bean="otherBean" /> <ref bean="otherBean" /> <bean class="com.zhengqing._03_di.OtherBean" /> <bean class="com.zhengqing._03_di.OtherBean" /> </list> </property> <!-- private Set<OtherBean> otherBeanSet; -無序,不可以重複 --> <property name="otherBeanSet"> <set> <ref bean="otherBean" /> <ref bean="otherBean" /> <bean class="com.zhengqing._03_di.OtherBean" /> <bean class="com.zhengqing._03_di.OtherBean" /> </set> </property> <!-- private Set<String> set; --> <property name="set"> <set> <value>123</value> <value>ABC</value> <value>資料String</value> </set> </property> <!-- private List<String> set; 這種情況雖然不會報錯,但不建議使用!! <property name="list"> <list> <value>123</value> <value>ABC</value> <value>資料String</value> </list> </property> --> <!-- String[] arrays -陣列 <property name="arrays"> <array> <value>資料1</value> <value>資料2</value> <value>資料3</value> </array> </property> --> <property name="arrays" value="資料1,資料2,資料3"></property> <!-- Properties props1:標準寫法(支援中文) --> <property name="props1"> <props> <prop key="dirverName">mysql</prop> <prop key="url">3306</prop> <prop key="username">root</prop> <prop key="password">admin支援中文</prop> </props> </property> <!-- Properties props2:簡寫方式 --> <property name="props2"> <value> dirvenName=mysql url=3306 username=root password=admin不支援中文 </value> </property> </bean> </beans>
XML自動注入
全註解配置
@Component 普通倉庫
@Repository 倉庫(就是dao層)
@Service service層
@Controller 控制層(servlet、action)
第一步: 配置 讓Spring掃描類與支援註解
第二步:在類裡面加上註解
第三步:註解配置bean的名稱(如果介面有兩個實現會出問題,如何解決?? -- >為dao生成的bean加上名稱,我們在呼叫的時候確定名稱即可)
第四步:呼叫名稱【方案一:使用@Autowired 方案二:使用@Resource】
ex:1個實現介面類的情況
2個實現介面類的情況