本文共 13103 字,大约阅读时间需要 43 分钟。
Spring的依赖注入包括两方面:
1、依赖:指bean对象创建依赖于容器;Bean对象的依赖资源。
2、注入:指bean对象依赖的资源由容器来设置和装配。
Spring的注入有两类:
1、构造器的注入:使用的是constructor-arg,如图:
2、setter注入:
要求被注入的属性,必须有set方法,set方法生成的方法名,由set+属性(首字母大写),如果属性是boolean类型,没有get方法,是is方法。
1)常量注入:
2)bean的注入:
给Address配置值之后如图:
Address类代码:
package com.myspring.vo;public class Address { private String address ; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
Student类代码:
package com.myspring.vo;public class Student { private String name; private Address addr ; public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); }}
3)数组注入:
在Student类中加入字符串数组,代码如:
package com.myspring.vo;public class Student { private String name; private Address addr ; private String[] books ; public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); System.out.print("books="); for (int i = 0; i < books.length; i++) { System.out.print(books[i]+" "); } System.out.println(); }}
beans.xml代码增加了输入注入,如图:
beans.xml代码:
测试代码Test:傲慢与偏见 仲夏夜之梦 雾都孤儿
package com.myspring.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.myspring.vo.Student;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml") ; Student student = (Student) ac.getBean("student") ; student.show() ; } }
运行后控制台打印信息:
4)List注入:
在Student实体类中增加集合属性hobbies,代码如:
package com.myspring.vo;import java.util.List;public class Student { private String name; private Address addr ; private String[] books ; private Listhobbies ; public void setHobbies(List hobbies) { this.hobbies = hobbies; } public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); System.out.print("books="); for (int i = 0; i < books.length; i++) { System.out.print(books[i]+" "); } System.out.println(); System.out.println("hobbies = "+ hobbies); }}
在beans.xml中配置如下:
运行test测试类代码:傲慢与偏见 仲夏夜之梦 雾都孤儿
羽毛球 乒乓球 足球 台球
package com.myspring.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.myspring.vo.Student;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml") ; Student student = (Student) ac.getBean("student") ; student.show() ; } }
控制台打印如下:
5)map注入:
实体类Student中增加map属性cards,代码如:
package com.myspring.vo;import java.util.List;import java.util.Map;public class Student { private String name; private Address addr ; private String[] books ; private Listbeans.xml中的配置文件如下:hobbies ; private Map cards ; public void setCards(Map cards) { this.cards = cards; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); System.out.print("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); }}
傲慢与偏见 仲夏夜之梦 雾都孤儿
羽毛球 乒乓球 足球 台球
运行test类,代码同上面的test,控制台打印信息如下:
6)Set集合注入:
实体类Student代码如下:
package com.myspring.vo;import java.util.List;import java.util.Map;import java.util.Set;public class Student { private String name; private Address addr ; private String[] books ; private Listhobbies ; private Map cards ; private Set games ; public void setGames(Set games) { this.games = games; } public void setCards(Map cards) { this.cards = cards; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); System.out.print("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); }}
beans.xml代码如下:
傲慢与偏见 仲夏夜之梦 雾都孤儿
羽毛球 乒乓球 足球 台球 lol dota cs cf
测试类代码test同上面,运行后控制台打印信息:
7)Null注入:
实体类Student代码:
package com.myspring.vo;import java.util.List;import java.util.Map;import java.util.Set;public class Student { private String name; private Address addr ; private String[] books ; private Listbeans.xml代码:hobbies ; private Map cards ; private Set games ; private String wife ; public void setWife(String wife) { this.wife = wife; } public void setGames(Set games) { this.games = games; } public void setCards(Map cards) { this.cards = cards; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name +"---addr="+addr.getAddress()); System.out.print("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); System.out.println("wife = "+ wife ); }}
傲慢与偏见 仲夏夜之梦 雾都孤儿
羽毛球 乒乓球 足球 台球 lol dota cs cf
运行test测试类,控制台打印信息如下:
8)Properties注入
实体类Student代码:
package com.myspring.vo;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;public class Student { private String name; private Address addr; private String[] books; private Listbeans.xml配置代码:hobbies; private Map cards; private Set games; private String wife; private Properties info; public void setInfo(Properties info) { this.info = info; } public void setWife(String wife) { this.wife = wife; } public void setGames(Set games) { this.games = games; } public void setCards(Map cards) { this.cards = cards; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } public void setAddr(Address addr) { this.addr = addr; } public void setName(String name) { this.name = name; } public void setBooks(String[] books) { this.books = books; } public void show() { System.out.println("name=" + name + "---addr=" + addr.getAddress()); System.out.print("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); System.out.println("wife = " + wife); System.out.println("info = " + info); }}
傲慢与偏见 仲夏夜之梦 雾都孤儿
羽毛球 乒乓球 足球 台球 lol dota cs cf 11020039398 男 小明
运行测试类test结果如下:
9)、p命名空间注入:
我们从下面的文档截图中可以看到这是p命名空间的头文件,该文档所在路径可以从图中看到,
p命名空间的头文件部分和普通的头文件部分唯一的不同就是p命名空间的头文件多了xmlns:p="" 这部分,如图:
下面来看一下p命名怎么注入:
新建一个实体类User,代码如下:
package com.myspring.vo;public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; }}beans.xml中的配置代码如下:
其中name和age是对应的实体类User中的name和age属性
测试类test代码如下:
package com.myspring.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.myspring.vo.Student;import com.myspring.vo.User;public class Test { public static void main(String[] args) { //p命名注入测试 ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml") ; User user = (User) ac.getBean("user") ; System.out.println(user); } }
控制台打印的运行结果如下:
3、c命名空间注入(其实就是构造方法注入)
c命名空间注入需要现在beans.xml头文件部分增加
xmlns:c="http://www.springframework.org/schema/c"
实体类User代码如下:
package com.myspring.vo;public class User { private String name; private int age; public User() { // TODO Auto-generated constructor stub } public User(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; }}
beans.xml代码如下:
测试类Test代码:
package com.myspring.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.myspring.vo.Student;import com.myspring.vo.User;public class Test { public static void main(String[] args) { //p命名注入测试 ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml") ; User user = (User) ac.getBean("c_user") ; System.out.println(user); } }控制台打印运行结果如下: