初識Spring框架IOC屬性注入

Spring框架是個輕量級的Java EE框架。所謂輕量級,是指不依賴於容器就能運行的。spring

Spring以IOC、AOP爲主要思想,其中IoC,Inversion of Control 指控制反轉或反向控制。在Spring框架中咱們經過配置建立類對象,由Spring在運行階段實例化、組裝對象。框架

在傳統的方式中,咱們須要去先實例化一個對象,再調用方法,好比有一個類A ,在其餘類中去調用時須要先實例化才能夠。ide

而在Spring中將對象的建立交由Spring框架進行管理。 
 首先配置beans-xml文件的頭文件:this

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
6 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
7 
8 
9 </beans>

 

屬性注入:spa

 1 package com.spring.model;
 2 
 3 public class Dog {
 4     private int dogId;
 5     private String dogName;
 6     public int getDogId() {
 7         return dogId;
 8     }
 9     public void setDogId(int dogId) {
10         this.dogId = dogId;
11     }
12     public String getDogName() {
13         return dogName;
14     }
15     public void setDogName(String dogName) {
16         this.dogName = dogName;
17     }
18     @Override
19     public String toString() {
20         return "Dog [dogId=" + dogId + ", dogName=" + dogName + "]";
21     }
22     public Dog(int dogId, String dogName) {
23         super();
24         this.dogId = dogId;
25         this.dogName = dogName;
26     }
27     public Dog() {
28         super();
29     }
30     
31     
32     
33 }

 

property 注入:
 1 <!--屬性注入 :    若是屬性是簡單類型,直接經過value屬性進行賦值 -->
 2         <bean id="dog1" class="com.spring.model.Dog">
 3             <property name="dogId" value="1"></property>
 4             <property name="dogName" value="哈士奇"></property>
 5         
 6         </bean>
 7         <!--若是屬性注入的時候是對象,經過ref來賦值,ref的值爲實例化對象的id  -->
 8         <bean id="man1" class="com.spring.model.Man">
 9             <property name="name" value="ztt"></property>
10             <property name="dog" ref="dog1"></property>
11         </bean>

構造注入:code

 1 package com.spring.model;
 2 
 3 public class Man {
 4     private String name;
 5     private Dog dog;
 6     public String getName() {
 7         return name;
 8     }
 9     public void setName(String name) {
10         this.name = name;
11     }
12     public Dog getDog() {
13         return dog;
14     }
15     public void setDog(Dog dog) {
16         this.dog = dog;
17     }
18     @Override
19     public String toString() {
20         return "Man [name=" + name + ", dog=" + dog + "]";
21     }
22 }
 1 <!--構造注入:須要注意的是,構造注入時要有一個無參的構造  
 2             注入時默認是按照順序來得
 3             若是賦值時沒有按照構造時的順序來 咱們能夠指定索引 index,索引從0開始;
 4             賦值時也能夠根據屬性的類型進行賦值,但當多個屬性的類型同樣時,此方法就存在了弊端
 5         
 6         -->
 7         
 8         <bean id="dog2" class="com.spring.model.Dog">
 9             <constructor-arg value="2"></constructor-arg>
10             <constructor-arg value="泰迪"></constructor-arg>
11         </bean>

 

 經常使用的List的注入方法:xml

 1     <!--List的注入方法  -->
 2         <bean id="list1" class="com.spring.model.List">
 3             <property name="list">
 4                 <list>
 5                     <value>武漢</value>
 6                     <value>濟南</value>
 7                     <value>石家莊</value>
 8                     <value>煙臺</value>
 9                 </list>
10             </property>
11         </bean>
12         

經常使用的Map的注入方法:對象

 1 <!-- Map的注入方法 -->
 2         <bean id="map1" class="com.spring.model.Map">
 3             <property name="map">
 4                 <map>
 5                     <entry key="1" value="武漢"></entry>
 6                     <entry key="2" value="濟南"></entry>
 7                     <entry key="3" value="石家莊"></entry>
 8                     <entry key="4" value="煙臺"></entry>
 9                 </map>
10             </property>
11         </bean>

p命名空間:blog

在bean配置的頭文件中添加xmlns:p="http://www.springframework.org/schema/p"索引

1 <!--p命名空間,簡單屬性  -->
2         <bean id="dog3" class="com.spring.model.Dog" p:dogId="3" p:dogName="柴犬"></bean>
3         
4         <!--p命名空間,對象屬性  -->
5         <bean id="man3" class="com.spring.model.Man" p:name="ztt" p:dog-ref="dog1"></bean>

自動裝配:

 1 <!--自動裝配autowire
 2         byName:與對象的屬性的名字相匹配
 3                 例如:Man的其中一個屬性是private Dog dog;因此找到的是Dog的實例化對象id是dog的
 4                 若是Man的其中一個屬性是private Dog dog3;因此找到的是Dog的實例化對象id是dog3的
 5         byType:匹配相同的數據類型,須要注意的是當前容器只能有一個該類型的bean
 6           -->
 7         <bean id="dog" class="com.spring.model.Dog" p:dogId="0" p:dogName="哈士奇"></bean>
 8         <!--  -->
 9         <bean id="man4" class="com.spring.model.Man" p:name="lxx" autowire="byName"></bean>
10         <bean id="man5" class="com.spring.model.Man" p:name="lxx" autowire="byType"></bean>
相關文章
相關標籤/搜索