Spring注入

  • Spring注入是指在启动Spring容器加载配置的时候完成对变量的赋值行为
  • 常用的两种注入方式
    • 设值注入:通过一个成员变量的set方法进行设值
    • 如下代码中,id 用来区分不同的bean,class的路径为对应类的路径,以包名.类名的形式,property对应着属性,在property指明在login类中存在一个User类的成员变量,ref是声明login有一个引用它指向了对应的user bean,对应着User类。 在java类中,我们通常将属性设置为private访问权限,通过set、get方法去对私有属性进行读写操作,设值注入相当于自动为我们调用set方法对属性进行赋值
        <bean id="login" class="cn.xm.action.Login">
            <property name="user" ref="user"/>
        </bean>
        <bean id="user" class="com.xm.bean.User"></bean>
 - 构造注入:通过构造器的形式为成员变量赋值
 - 与设值注入相比,构造注入多了<constructor-arg > 标签。在ioc容器调用Login的构造方法去创建实例的时候,会根据ref讲User的实例赋值给构造器中声明的user属性,从而完成在创建Login时候对user的赋值
        <bean id="login" class="cn.xm.action.Login">
            <constructor-arg name="user" ref="user"></constructor-arg>
        </bean>
        <bean id="user" class="com.xm.bean.User"></bean>

设值注入实例:
UserService.java:

package cn.xm.test.service;
import cn.xm.test.dao.UserDAO;
public class UserService {
    private UserDAO userDAO;
    public void save(String arg) {
        System.out.println("Service接收参数" +  arg);
        arg = arg + ":" + this.hashCode();
        userDAO.save(arg);
    }
    //设值注入
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
}

UserDAO.java:

package cn.xm.test.dao;

public class UserDAO {
    public void save(String arg) {
        //模拟数据库保存操作
        System.out.println("保存数据:" + arg);
    }
}

spring-injection.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd" >
        <bean id="UserService" class="cn.xm.service.UserService">
            <property name = "userDAO" ref="userDAO"></property>
        </bean>

        <bean id="userDAO" class="cn.xm.dao.UserDAO"></bean>
 </beans>

TestInjection.java:

package cn.xm.test.ioc.interfaces;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import cn.xm.test.base.UnitTestBase;
import cn.xm.test.service.UserService;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestInjection extends UnitTestBase {

    public TestInjection() {
        super("classpath:spring-injection.xml");
    }
    @Test
    public void testSetter() {
        UserService service = super.getBean("UserService");
        service.save("这是要保存的数据");
    }

}

以上通过UserDAO模拟了存储的操作,并且在UserService中模拟了业务操作。最后用junit进行了单元测试。
构造注入的与设置注入的区别在于spring-injection.xml的配置上和UserService的构造上:
spring-injection.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd" >
        <!-- 
        <bean id="UserService" class="cn.xm.test.service.UserService">
            <property name = "userDAO" ref="userDAO"></property>
        </bean>
         -->
        <bean id="UserService" class="cn.xm.test.service.UserService">
            <constructor-arg name = "userDAO" ref="userDAO"></constructor-arg>
        </bean>
        <bean id="userDAO" class="cn.xm.test.dao.UserDAO"></bean>
 </beans>

UserService.java:

package cn.xm.test.service;
import cn.xm.test.dao.UserDAO;
public class UserService {
    private UserDAO userDAO;
    //构造注入
    public UserService(UserDAO userDAO){
        this.userDAO  = userDAO;
    }
    public void save(String arg) {
        System.out.println("Service接收参数" +  arg);
        arg = arg + ":" + this.hashCode();
        userDAO.save(arg);
    }
    //设值注入
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值