天天看點

spring依賴注入(dependency injection)

spring依賴注入包括兩個方面:

      依賴:指bean對象建立依賴于容器。bean對象的依賴資源

      注入:bean對象的依賴資源由容器來設定和裝配

Spring的注入有兩類:

1、構造器的注入:使用constructor-arg

<bean id="user" class="com.test.vo.User">  
       <!-- index指構造方法  參數下标從0開始     -->  
       <constructor-arg index="0" value="李四"/>    
</bean>
           

2、setter注入

要求被注入的屬性,必須有set方法,set方法生成的方法名,由set+屬性(首字母大寫),如果屬性是boolean類型,沒有get方法,是is方法。

a、常量注入

<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
</bean>
           

b、bean的注入

<bean id="addr" class="com.test.vo.Address"/>
<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
	<property name="addr" ref="addr"/>
</bean>
           

Address.java

public class Address {
	private String address;

	public void setAddress(String address) {
		this.address = address;
	}

	public String getAddress() {
		return address;
	}
}
           

Student.java

public class Student {
	private String name;
	private Address addr;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void show(){
		System.out.println("name:"+name+" addr="+addr.getAddress());
	}
}
           

3、數組注入

beans.xml配置

<bean id="addr" class="com.test.vo.Address">
      <property name="address" value="回龍觀"/>
</bean>
<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
	<property name="addr" ref="addr"/>
	<property name="books">
            <array>
		<value>傲慢與偏見</value>
		<value>仲夏夜之夢</value>
		<value>悲慘世界</value>
	    </array>
	</property>
</bean>
           

Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
	}
}
           

4、list注入

beans.xml配置

<bean id="addr" class="com.test.vo.Address">
      <property name="address" value="回龍觀"/>
</bean>
<bean id="student" class="com.test.vo.Student">
      <property name="name" value="小明"/>
      <property name="addr" ref="addr"/>
      <property name="books">
	   <array>
		 <value>傲慢與偏見</value>
		 <value>仲夏夜之夢</value>
		 <value>悲慘世界</value>
	   </array>
	</property>
	<property name="hobbies">
	   <list>
		 <value>羽毛球</value>
		 <value>乒乓球</value>
		 <value>排球</value>
	   </list>
     </property>
</bean>
           

Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
	}
}
           

5、map注入

beans.xml配置添加

<property name="cards">
	<map>
	    <entry key="中國銀行" value="12345678901"/>
	    <entry>
		<key><value>工商銀行</value></key>
	        <value>32119876545</value>
	    </entry>  
	</map>
</property>
           

Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	private Map<String,String> cards;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void setCards(Map<String, String> cards) {
		this.cards = cards;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
		System.out.println("cards="+cards);
	}
}
           

6、set注入

<property name="games">
   <set>
	<value>開心消消樂</value>
	<value>賓果消消消</value>
   </set>
</property>
           

Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	private Map<String,String> cards;
	private Set<String> games;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void setGames(Set<String> games) {
		this.games = games;
	}
	public void setCards(Map<String, String> cards) {
		this.cards = cards;
	}
	
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
		System.out.println("cards="+cards);
		System.out.println("games="+games);
	}
}
           

7、Null注入

<property name="wife"><null/></property>
           

Student.java添加屬性

private String wife;
           

8、properties注入

<property name="info">
	<props>
		<prop key="學号">20171050</prop>
		<prop key="sex">男</prop>
		<prop key="年級">大一</prop>
	</props>
</property>
           

Student.java添加變量

private Properties info;
           

Test測試類

public class Test {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		Student stu=(Student) context.getBean("student");
		stu.show();
	}
}
           

測試所有代碼運作結果,如圖:

spring依賴注入(dependency injection)

9、p命名空間注入

需要在beans.xml配置頭檔案中加入

xmlns:p="http://www.springframework.org/schema/p"
           

beans.xml配置檔案中添加

<!--p命名空間注入  屬性依然要設定set方法  -->
	<bean id="user" class="com.test.vo.User" p:name="小紅" p:age="12"/>
           

建立User.java

public class User {
	private String name;
	private int age;
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User[name="+name+",age="+age+"]";
	}

}
           

測試類改為

public class Test {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User u=(User) context.getBean("user");
		System.out.println(u);
      }
}
           

測試結果:

User[name=小紅,age=12]