注入方式
set方式注入:
User.java
public class User {
private String name;
private Integer age;
private Car car;
public User() {
System.out.println("user构造");
}
public User(String name,Car car) {
super();
this.name = name;
this.car = car;
}
public User(Car car,String name) {
super();
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;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
Car.java
public class Car {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Car [name=" + name + "]";
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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">
<!-- 值类型注入 为name,age注入jack,20 -->
<property name="name" value="jack"></property>
<property name="age" value="20"></property>
<!-- 引用类型注入 引用Car -->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="大奔"></property>
</bean>
</beans>
Demo:
@Test
public void fun1() {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) ac.getBean("user");
System.out.println(user.toString());
}
效果:(控制台)
构造方式注入:
改applicationContext:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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">
<!-- 值类型注入 为name,age注入jack,20 -->
<property name="name" value="jack"></property>
<property name="age" value="20"></property>
<!-- 引用类型注入 引用Car -->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="大奔"></property>
</bean>
<!-- 构造函数注入 -->
<bean name="user2" class="cn.itcast.bean.User">
<constructor-arg name="name" value="tom"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>
</beans>
Demo(获取user2)
@Test
public void fun2() {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) ac.getBean("user2");
System.out.println(user.toString());
}
效果:(控制台)
注意:上面User中有两个有参构造,只是顺序不一样,刚才用到是哪个?
分别在两个构造上打印一句话
效果:(控制台)
那么怎么使用 public User(String name,Car car) ?
改applicationContext.xml (指定index属性)
<!-- 构造函数注入 -->
<bean name="user2" class="cn.itcast.bean.User">
<constructor-arg name="name" value="tom" index="0"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
效果:(控制台)
如果在User.java中添加构造
public User(Integer name,Car car) {
super();
this.name = name+"";
this.car = car;
System.out.println("33333Integer name,Car car");
}
改applicationContext.xml (指定type属性)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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">
<!-- 值类型注入 为name,age注入jack,20 -->
<property name="name" value="jack"></property>
<property name="age" value="20"></property>
<!-- 引用类型注入 引用Car -->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="cn.itcast.bean.Car">
<property name="name" value="大奔"></property>
</bean>
<!-- 构造函数注入 -->
<bean name="user2" class="cn.itcast.bean.User">
<constructor-arg name="name" value="998" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
</beans>
效果:(控制台)