Spring配置檔案
阿新 • • 發佈:2020-08-12
目錄
3、建立物件的方式
3.1、無參構造方法
<bean id="user" class="com.ch.pojo.User"> <property name="name" value="張三"></property> </bean>
3.2、有參構造方法
(1)使用屬性名建立
<bean id="user" class="com.ch.pojo.User">
<constructor-arg name="name" value="張三"></constructor-arg>
</bean>
(2)使用引數下標建立
<bean id="user" class="com.ch.pojo.User"> <constructor-arg index="0" value="張三"></constructor-arg> </bean>
(3)使用屬性型別建立(不建議使用)
存在問題:①可能資料型別寫錯;②可能有多個相同型別的屬性
<bean id="user" class="com.ch.pojo.User">
<constructor-arg type="java.lang.String" value="張三"></constructor-arg>
</bean>
4、xml配置
4.1、bean
<bean id="user" class="com.ch.pojo.User" name="u1 u2 u3,u4"></bean>
id:自定義的變數名
class:bean物件的全限定名(包名+類名)
name:取別名,比alias高階,可以用空格|逗號|混搭取多個別名
4.2、alias
<alias name="user" alias="uu"></alias>
只能取一個別名
4.3、import
<import resource="beans.xml"></import>
<import resource="beans1.xml"></import>
合併其他的配置檔案
5、依賴注入DI
以前的理解:依賴注入就是注入物件的時候,連同他的依賴關係一同注入。
目前:分開解釋
依賴:bean物件的建立依賴容器
注入:bean物件中的屬性由容器注入
5.1、構造器注入
3中以及實現過
5.2、屬性注入
屬性注入的前提:必須要有set方法才能注入
pojo:Student
@Data
public class Student implements Serializable {
private String uname;
private Double[] scores;
private List<String> books;
private Teacher teacher;
private Set<String> subject;
private Map<String, String> map;
private String tube;
private Properties properties;
}
<bean id="teacher" class="com.ch.pojo.Teacher">
<constructor-arg name="tid" value="0001"></constructor-arg>
<constructor-arg name="tname" value="李穎"></constructor-arg>
</bean>
<bean id="student" class="com.ch.pojo.Student">
<!-- 普通屬性注入:String -->
<property name="uname" value="張三"></property>
<!-- 陣列注入 -->
<property name="scores">
<array>
<value>75.5</value>
<value>75.6</value>
<value>75.7</value>
</array>
</property>
<!-- list注入 -->
<property name="books">
<list>
<value>語文</value>
<value>數學</value>
<value>英語</value>
</list>
</property>
<!-- set注入 -->
<property name="subject">
<set>
<value>體育</value>
<value>音樂</value>
</set>
</property>
<!-- 物件注入 -->
<property name="teacher" ref="teacher"></property>
<!-- map注入 -->
<property name="map">
<map>
<entry key="音樂" value="肖恩"></entry>
</map>
</property>
<!-- null值注入 -->
<property name="tube">
<null/>
</property>
<!-- properties注入 -->
<property name="properties">
<props>
<prop key="driver">com.mysql.jdbc.Driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
5.3、拓展注入
p名稱空間
<bean id="user" class="com.ch.pojo.User" p:name="張三"></bean>
注意
(1)一定要先在xml檔案中匯入約束才能用
(2)類中一定要有無參構造方法,否則不能使用p名稱空間
(3)和屬性注入相同的操作
xmlns:p="http://www.springframework.org/schema/p"
c名稱空間
<bean id="user" class="com.ch.pojo.User" c:name="李四"></bean>
注意
(1)一定要先在xml檔案中匯入約束才能用
(2)類中一定要有有參構造方法,否則不能使用c名稱空間
(3)和構造器注入相同的操作
xmlns:c="http://www.springframework.org/schema/c"
6、Bean作用域(bean scope)
7、Bean自動裝配
7.1、byName
User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private String name;
private Student student;
private Teacher teacher;
}
applicationContext.xml
<bean id="teacher" class="com.ch.pojo.Teacher"></bean>
<bean id="student" class="com.ch.pojo.Student"></bean>
<bean id="user" class="com.ch.pojo.User" autowire="byName"></bean>
注意:
(1)id必須唯一,否則通過id的name裝配的時候會報錯
(2)byName裝配是根據屬性名與id對應查詢裝配的
(3)前提條件:id對應屬性名,屬性必須要要有set方法,否則結果均為null
7.2、byType
applicationContext.xml
<bean id="teacher" class="com.ch.pojo.Teacher"></bean>
<bean id="student" class="com.ch.pojo.Student"></bean>
<bean id="user" class="com.ch.pojo.User" autowire="byType"></bean>
注意:
(1)id可以省略
(2)byType是根據屬性的型別進行查詢裝配的
(3)如果有兩個相同型別的話,依舊會報錯