spring中 属性注入的四种方式
1、set方法注入
配置:
<!-- set 方式属性注入 --> <bean name="user" class="cn.itcast.bean.User"> <!--为User对象中 名为name的属性注入 tom 作为值 --> <!-- 值类型注入 --> <property name="name" value="tom"></property> <property name="age" value="18"></property> <!-- 引用类型注入 --> <property name="car" ref="car"></property> </bean> <!-- 将Car对象配置到容器中 --> <bean name="car" class="cn.itcast.bean.Car"> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean>
//测试demo public class Demo { @Test public void test(){ //1、创建容器对象 ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml"); //2、像容器要User对象 User user = (User)ac.getBean("user"); //3、打印user对象 System.out.println(user.toString()); } }
结果:
2、构造方法注入
配置:
<!-- 构造函数注入 --> <bean name="user1" class="cn.itcast.bean.User"> <constructor-arg name="name" value="jerry"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean>
实体:
package cn.itcast.bean; public class User { private String name; private Integer age; private Car car; public User(String name, Car car) { System.out.println("User(String name, Car car)"); this.name = name; this.car = car; } public User(Integer name, Car car) { System.out.println("User(Integer name, Car car)"); this.name = name+""; this.car = car; } public User(){ System.out.println("user对象空参构造"); } 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 Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", car=" + car.toString() + "]"; } }
demo
public class Demo { @Test public void test(){ //1、创建容器对象 ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml"); //2、像容器要User对象 User user = (User)ac.getBean("user1"); //3、打印user对象 System.out.println(user.toString()); } }
结果
由 name+index + type 可以任意指定一个构造参数
<!-- 构造函数注入 --> <bean name="user1" class="cn.itcast.bean.User"> <!--name属性: 构造参数的参数名 --> <!--name属性: 构造参数的索引 --> <!--name属性: 构造参数的类型 --> <constructor-arg name="name" index="0" type="java.lang.Integer" value="jerry"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean>
3、p名称空间注入
配置
<!-- p名称空间注入 --> <!-- 1、导入p名称空间 xmlns="http://www.springframework.org/schema/beans" 2、使用 p:属性 完成属性注入 值类型 p:属性名=值 对象类型: p:属性名-ref ="对象名称" --> <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car"> </bean>
demo
public class Demo { @Test public void test(){ //1、创建容器对象 ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml"); //2、像容器要User对象 User user = (User)ac.getBean("user3"); //3、打印user对象 System.out.println(user.toString()); } }
结果:
4、spel注入
配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- set 方式属性注入 --> <bean name="user" class="cn.itcast.bean.User"> <!--为User对象中 名为name的属性注入 tom 作为值 --> <property name="name" value="tom"></property> <property name="age" value="18"></property> <property name="car" ref="car"></property> </bean> <!-- 将Car对象配置到容器中 --> <bean name="car" class="cn.itcast.bean.Car"> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean> <!-- 构造函数注入 --> <bean name="user1" class="cn.itcast.bean.User"> <!--name属性: 构造参数的参数名 --> <!--name属性: 构造参数的索引 --> <!--name属性: 构造参数的类型 --> <constructor-arg name="name" index="0" type="java.lang.Integer" value="18"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean> <!-- p名称空间注入 --> <!-- 1、导入p名称空间 xmlns="http://www.springframework.org/schema/beans" 2、使用 p:属性 完成属性注入 值类型 p:属性名=值 对象类型: p:属性名-ref ="对象名称" --> <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car"> </bean> <!-- spel 注入 --> <bean name="user4" class="cn.itcast.bean.User"> <property name="name" value="#{user.name}"></property> <property name="age" value="#{12}"></property> <property name="car" ref="car"></property> </bean> </beans>
demo
public class Demo { @Test public void test(){ //1、创建容器对象 ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml"); //2、像容器要User对象 User user = (User)ac.getBean("user4"); //3、打印user对象 System.out.println(user.toString()); } }
结果