spring学习笔记(五):依赖注入,通过 IOC 容器给对象的属性注入值

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"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值