1、通过 构造函数 给对象的属性 注入值:
spring学习笔记(三):通过 IOC 创建 有参构造 的对象
2、通过 setter 方法给对象的属性 注入值:普通属性直接赋值
实体类 User.java:
/**
* 实体类 javabean
*/
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
bean.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 通过 setter 方法给对象的属性注入值 -->
<bean id="user" class="com.spring.demo.User">
<!-- 指定属性的值:根据属性名 调用相对应的 setter 方法 -->
<property name="id" value="12"/> <!-- 普通属性通过 value 直接赋值 -->
<property name="name" value="田七"/>
</bean>
</beans>
测试程序 Demo.java:
public class Demo {
@Test
public void test1() {
// 创建 IOC 容器
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 获取对象
User user = (User) context.getBean("user");
System.out.println(user);
}
}
结果:
3、 通过 setter 方法给对象的属性 注入值:对象属性需要引入外部的对象进行赋值
UserDao.java:
public class UserDao {
public void save(){
System.out.println("保存数据");
}
}
UserService.java:
public class UserService {
// 对象的属性
private UserDao userDao;
// 对象属性的 setter 方法:IOC 将通过该 setter 方法给属性 注入值
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save(){
userDao.save();
}
}
UserAction.java:
public class UserAction {
// 对象的属性
private UserService userService;
// 对象属性的 setter 方法:IOC 将通过该 setter 方法给属性 注入值
public void setUserService(UserService userService) {
this.userService = userService;
}
public void save(){
userService.save();
}
}
bean.xml:
<!-- 创建 UserDao 对象 -->
<bean id="userdao" class="com.spring.demo.UserDao"/>
<!-- 创建 UserService 对象 -->
<bean id="userService" class="com.spring.demo.UserService">
<!-- 对象属性需要通过 ref 引用外部的对象进行注入值:
引用上面创建的 userdao 对象,给当前对象的 userDao 属性赋值 -->
<property name="userDao" ref="userdao"/>
</bean>
<!-- 创建 UserAction 对象 -->
<bean id="userAction" class="com.spring.demo.UserAction">
<!-- 引用上面创建的 userService 对象,给当前对象的 userService 属性赋值 -->
<property name="userService" ref="userService"/>
</bean>
测试程序 Demo.java:
public class Demo {
@Test
public void test1() {
// 创建 IOC 容器
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 获取对象
UserAction userAction = (UserAction) context.getBean("userAction");
userAction.save();
}
}
结果:
4、 通过 setter 方法给对象的属性 注入值:使用 内部bean 方式
使用上面的 UserDao.java、UserService.java、UserAction.java、Demo.java,修改 bean.xml 为:
<!-- 内部 bean 方式给 对象的属性 注入值 -->
<bean id="userAction" class="com.spring.demo.UserAction"> <!-- 创建对象:UserAction -->
<property name="userService"> <!-- UserAction 对象的属性:userService -->
<bean class="com.spring.demo.UserService"> <!-- 属性 userService 的值:UserService 对象 -->
<property name="userDao"> <!-- UserService 对象的属性:userDao -->
<bean class="com.spring.demo.UserDao"/> <!-- 属性 userDao 的值:UserDao 对象 -->
</property>
</bean>
</property>
</bean>
5、 通过 setter 方法给对象的属性 注入值:使用 p名称空间 方式,普通属性使用 p:属性名 直接进行赋值。
bean.xml:
<!-- 使用 p名称空间 方式给属性注入值
p:id="11" p:name="熊二" 普通属性通过 p:属性名 直接进行赋值 -->
<bean id="user" class="com.spring.demo.User" p:id="11" p:name="熊二"/>
6、 通过 setter 方法给对象的属性 注入值:使用 p名称空间 方式,对象属性使用 p:属性名-ref 引用外部对象进行 注入值
bean.xml:
<!-- 创建 userDao 对象 -->
<bean id="userDao" class="com.spring.demo.UserDao"/>
<!-- 使用 p名称空间 方式给属性注入值
p:userDao-ref="userDao":对象属性通过 p:属性名-ref 引用外部对象进行 注入值 -->
<bean id="userService" class="com.spring.demo.UserService" p:userDao-ref="userDao"/>
<!-- 通过 p名称空间 引用上面创建的 userService 对象给属性注入值 -->
<bean id="userAction" class="com.spring.demo.UserAction" p:userService-ref="userService"/>