Spring(六):自动装配Autowire

Spring中,<bean>标签里面有一个属性叫autowire,其取值范围有'default','byName','byType','constructor','no';这里主要举例说明一下'byName'的用法,'byType'与之类似,主要是用对象的类型来注入值,这里就不一一赘述了,先附上beans.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"
        default-autowire="byName">
    <!-- 上面的default-autowire可配置全局 -->
    <bean id="userDAO" class="com.castiel.dao.impl.UserDAOImpl">
    	<property name="daoId" value="0"/>
    </bean>
       
    <bean id="userDAO1" class="com.castiel.dao.impl.UserDAOImpl">
    	<property name="daoId" value="1"/>
    </bean>
    
    <bean id="userDAO2" class="com.castiel.dao.impl.UserDAOImpl">
    	<property name="daoId" value="2"/>
    </bean>
    
    
    <!-- scope作用域 取值:singleton(默认值);prototype;request;session;global session; -->
    <!-- singleton(单例):无论取多少次这个对象,获得的都是同一对象 -->
    <!-- prototype(原型):每次取对象都是按照原型重新new一个:例如Action一般使用这个配置 -->
    
    <!-- autowire:default是指全局设置 -->
    <bean id="userService" class="com.castiel.service.UserService" scope="singleton" autowire="byName">
    	
    </bean>
</beans>

这里,我们设置了Spring容器中beanId='userService'的autowire属性为'byName',在xml最上面我们分别建立了userDAO、userDAO1、userDAO2这三个对象,这三个对象都有一个'daoId'的变量,我们要做的事情是,把userDAO、userDAO1、userDAO2这三个对象自动注入到userSerive这个对象中。

下面我们贴上UserService这个类的代码:
package com.castiel.service;

import com.castiel.dao.UserDAO;
import com.castiel.model.User;

public class UserService {
	
	private UserDAO userDAO;
	
	private UserDAO userDAO1;
	
	private UserDAO userDAO2;
	
	public UserDAO getUserDAO() {
		return userDAO;
	}

	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}

	public UserDAO getUserDAO1() {
		return userDAO1;
	}

	public void setUserDAO1(UserDAO userDAO1) {
		this.userDAO1 = userDAO1;
	}

	public UserDAO getUserDAO2() {
		return userDAO2;
	}

	public void setUserDAO2(UserDAO userDAO2) {
		this.userDAO2 = userDAO2;
	}

	public void add(User u){
		this.userDAO.save(u);
	}
}

由于要进行测试,我们要在UserDAOImpl类中建立一个名称为'daoId'的变量,并重写toString()方法,用于打印'daoId'的值:
package com.castiel.dao.impl;

import com.castiel.dao.UserDAO;
import com.castiel.model.User;

public class UserDAOImpl implements UserDAO {
	
	private int daoId;
	
	public int getDaoId() {
		return daoId;
	}

	public void setDaoId(int daoId) {
		this.daoId = daoId;
	}

	@Override
	public void save(User u) {
		// TODO Auto-generated method stub
		System.out.println("开始存储数据!");
		System.out.println("存储User...");
		//这里编写持久化到数据库的代码,如JDBC,或使用hibernate,ibatis等框架
		System.out.println("用户持久化到数据库完成!");
	}
	
	@Override
	public String toString(){
		return "daoId="+daoId;
	}

}

最后,我们编写一个测试方法验证是否注入成功:
package com.castiel.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.castiel.service.UserService;

public class UserServiceTest {
	/**测试类生成方式**/
	/**
	 * 1.选中src下com.castiel.service包中的UserService
	 * 2.右键new jUnit Test Case
	 * 3.点击NEXT
	 * 4.选择需要测试的方法
	 * 5.点击Finish
	 * 6.把生成出来的*Test.java文件拖到test下com.castiel.service包中
	 * @throws Exception 
	 */
	@Test
	public void testAdd() throws Exception {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
		UserService userService = (UserService)applicationContext.getBean("userService");
		System.out.println(userService.getUserDAO().toString());
		System.out.println(userService.getUserDAO1().toString());
		System.out.println(userService.getUserDAO2().toString());
	}

}

打印结果表示已经用autowire='byName'的方式注入成功,打印结果附图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值