【spring框架】AutoWire自动装配

简介:
看我们配置的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-2.5.xsd">


  <bean id="userDao" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="1"></property>
  </bean>
  <bean id="userDao2" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="2"></property>
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService" >
  	<property name="userDao" ref="u" />
  </bean>
  
</beans>
在默认的情况下,我们会手动设定userService所引用的bean:<property name="userDao" ref="u" />,但是我们也可以不指定,由spring来帮我们自动确定,这个叫做AutoWire,自动装配。
设置方法:
<bean id="userService" class="cn.edu.hpu.service.UserService" scope="prototype" autowire="default">
 </bean>
即在bean属性栏里加 autowire="XXX"的属性, autowire有以下几个参数可以设定:
no、byType、byName、default(常用的是这四个)
默认的是no,即需要手动来设定。
byName是按照名字去匹配。
byType是按照类型去匹配。
default是指定你在<beans...中设定的 default-autowire="XXX"

byName测试:

beans.xml中设置:
<bean id="userService" class="cn.edu.hpu.service.UserService" scope="prototype" autowire="byName">
 </bean>

UserDaoImpl.java:
package cn.edu.hpu.dao.Impl;


import java.util.List;
import java.util.Map;
import java.util.Set;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserDaoImpl implements UserDao{


	private int daoId;
	
	
	public int getDaoId() {
		return daoId;
	}




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




	public void save(User u) {
	    System.out.println("add success!!");		
	}




	@Override
	public String toString() {
		
		return "daoid="+daoId;
	}
}
改写了toString方法,打印daoId,看看下面注入了哪个UserDao
测试:
@Test
public void testAdd() throws Exception{
	BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
	
	UserService userService=(UserService)ctx.getBean("userService");
	System.out.println(userService.getUserDao());
}
结果:
daoid=1
也就是spring按照名字匹配上了<bean id="userDao"...那一项。(大概是按测试类里的UserDao类名来匹配的)


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-2.5.xsd">
  <bean id="userDao2" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="2"></property>
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService" autowire="byType">
  </bean>
  
</beans>


UserDaoImpl.java:
package cn.edu.hpu.dao.Impl;


import java.util.List;
import java.util.Map;
import java.util.Set;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserDaoImpl implements UserDao{


	private int daoId;
	
	
	public int getDaoId() {
		return daoId;
	}




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




	public void save(User u) {
	    System.out.println("add success!!");		
	}




	@Override
	public String toString() {
		
		return "daoid="+daoId;
	}
}
改写了toString方法,打印daoId,看看下面注入了哪个UserDao
测试:
@Test
public void testAdd() throws Exception{
	BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
	
	UserService userService=(UserService)ctx.getBean("userService");
	System.out.println(userService.getUserDao());
}
结果:
daoid=2

也就是spring按照类型匹配上了<bean id="userDao2"...那一项。(大概是按测试类里的UserDao类型匹配的)

转载请注明出处:http://blog.csdn.net/acmman

相关文章
|
2天前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
6 0
|
3天前
|
前端开发 Java 数据库连接
Java与Spring框架的深度融合
Java与Spring框架的深度融合
|
2天前
|
存储 缓存 Java
深入解析Spring框架中的ReflectionUtils
深入解析Spring框架中的ReflectionUtils
9 1
|
2天前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
5 0
|
3天前
|
开发框架 Java 开发者
Spring Boot中的自动装配原理
Spring Boot中的自动装配原理
|
3天前
|
消息中间件 Java Kafka
教程:Spring Boot集成Kafka Streams流处理框架
教程:Spring Boot集成Kafka Streams流处理框架
|
4天前
|
缓存 Java Maven
深入解析Google Guava库与Spring Retry重试框架
深入解析Google Guava库与Spring Retry重试框架
|
4天前
|
Java 数据处理 数据库
深入解析Spring Batch:企业级批处理框架的技术之旅
深入解析Spring Batch:企业级批处理框架的技术之旅
|
4天前
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
|
4天前
|
缓存 Java 数据库连接
spring中注解驱动事务框架的源码
spring中注解驱动事务框架的源码