Spring的属性注入
Spring的属性注入有三种:
- set方法注入
- 构造函数注入
- p名称控件注入
- spel注入
只用掌握set方法和构造方法注入即可
1.set方法注入
基本类型注入
1 <bean name="user" class="entity.User" > 2 <!--为user对象中名为name的属性注入值为tom--> 3 <property name="name" value="tom"></property> 4 <property name="age" value="28"></property> 5 </bean>
测试类
1 package injection; 2 3 import entity.User; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 public class DemoTest { 8 @org.junit.Test 9 public void fun1() throws Exception { 10 11 //1、创建容器对象,从类路径下去加载xml的配置文件 12 ApplicationContext ac=new ClassPathXmlApplicationContext("\\injection\\applicationContext.xml"); 13 //想容器要对象 14 User u=(User) ac.getBean("user"); 15 System.out.println(u); 16 17 } 18 19 }
输出为
引用类型注入
测试类
1 package entity; 2 3 public class User { 4 private String name; 5 private Integer age; 6 private Car car; 7 8 public Car getCar() { 9 return car; 10 } 11 12 public void setCar(Car car) { 13 this.car = car; 14 } 15 16 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public Integer getAge() { 27 return age; 28 } 29 30 public void setAge(Integer age) { 31 this.age = age; 32 } 33 34 public void init(){ 35 System.out.println("初始化方法"); 36 } 37 public void destroy(){ 38 System.out.println("销毁方法"); 39 } 40 41 @Override 42 public String toString() { 43 return "User{" + 44 "name='" + name + '\'' + 45 ", age=" + age + 46 ", car=" + car + 47 '}'; 48 } 49 }
User类中含有引用类型的对象Car,Car实体类为
1 package entity; 2 3 public class Car { 4 private String color; 5 private String name; 6 7 public String getColor() { 8 return color; 9 } 10 11 public void setColor(String color) { 12 this.color = color; 13 } 14 15 public String getName() { 16 return name; 17 } 18 19 public void setName(String name) { 20 this.name = name; 21 } 22 23 @Override 24 public String toString() { 25 return "Car{" + 26 "color='" + color + '\'' + 27 ", name='" + name + '\'' + 28 '}'; 29 } 30 }
配置文件中User的配置为 1 <bean name="user" class="entity.User" >
2 <!--为user对象中名为name的属性注入值为tom--> 3 <property name="name" value="tom"></property> 4 <property name="age" value="28"></property>
<!--通过ref配置引用类型--> 5 <property name="car" ref="car"></property> 6 </bean> 7 8 9 <bean name="car" class="entity.Car"> 10 <property name="name" value="benchi"></property> 11 <property name="color" value="black"></property> 12 </bean>
先配置Car对象,再通过ref将Car类对象配置入User对象中。
测试类
1 package injection; 2 3 import entity.User; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 public class DemoTest { 8 @org.junit.Test 9 public void fun1() throws Exception { 10 11 //1、创建容器对象,从类路径下去加载xml的配置文件 12 ApplicationContext ac=new ClassPathXmlApplicationContext("\\injection\\applicationContext.xml"); 13 //想容器要对象 14 User u=(User) ac.getBean("user"); 15 System.out.println(u); 16 17 } 18 19 }

2、构造函数注入
首先需要有带有参数的构造方法,为User创建带有参数name和car的构造方法
package entity; public class User { private String name; private Integer age; private Car car; public User() { } public User(String name, Car car) { System.out.println("User(String name, Car car)"); this.name = name; this.car = car; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public void init(){ System.out.println("初始化方法"); } public void destroy(){ System.out.println("销毁方法"); } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", car=" + car + '}'; } }
package entity; public class Car { private String color; private String name; public Car() { } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Car(String color, String name) { System.out.println("+Car(String color, String name)"); this.color = color; this.name = name; } @Override public String toString() { return "Car{" + "color='" + color + '\'' + ", name='" + name + '\'' + '}'; } }
为Car创建带有参数的构造方法,配置文件如下:
1 <bean name="car" class="entity.Car"> 2 <property name="name" value="benchi"></property> 3 <property name="color" value="black"></property> 4 </bean> 5 6 <bean name="user2" class="entity.User"> 7 <constructor-arg name="name" value="guojerry" index="0" type="java.lang.String"></constructor-arg> 8 <constructor-arg name="car" ref="car" index="1"></constructor-arg> 9 </bean>
使用construct-arg标签进行配置,index指明改参数的次序即是作为构造函数的第几个参数,type指明的是改参数的类型,当一个实体类中有多个构造方法时可通过index和type指定某个构造方法。

浙公网安备 33010602011771号