【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

时间: 2024-09-23 18:30:31

【spring框架】AutoWire自动装配的相关文章

Spring 的 autowire (自动装配)会不会很影响程序的性能呢?

问题描述 如果 struts2 的 action 由 spring 来管理, 并且struts.objectFactory.spring.autoWire=name, 由于 action 并不是单例的, 每次请求都重新创建,那么会不会每次 spring 创建 action 对象的时候都要搜索一遍 action 的所有的属性,看看是否有可注入的对象.而struts2 的  action 恰恰可能属性比较多, 这样会不会影响系统的性能呢?对spring 不是很熟悉,说的不对的地方,还请各位见谅! 解

Spring Autowire自动装配

在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的<ref>标签.实际上,这种方式也会在另一种形式上增加了应用程序的复杂性,那么如何解决这个问题呢?Spring为我们提供了一个自动装配的机制,尽管这种机制不是很完善,但是在应用中结合<ref>标签还是可以大大的减少我们的劳动强度.前面提到过,在定义Bean时,<bean>标签有一个

spring mvc-springmvc+mybatis 自动装配装配依赖的失败;嵌套例外

问题描述 springmvc+mybatis 自动装配装配依赖的失败;嵌套例外 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCr

详解Java的Spring框架下bean的自动装载方式_java

Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的<constructor-arg>和<property>元素. 自动装配模式:有下列自动装配模式,可用于指示Spring容器使用自动装配依赖注入.使用<bean/>元素的autowire属性为一个bean定义中指定自动装配模式. byName模式这种模式规定由自动装配属性名称.Spring容器在外观上自动线属性设置为byName的XML配置

《Spring攻略(第2版)》——1.12 用@Autowired和@Resource自动装配Bean

1.12 用@Autowired和@Resource自动装配Bean 1.12.1 问题 在Bean配置文件中设置autowire属性进行的自动装配将装配一个Bean的所有属性.这样的灵活性不足以仅仅装配特定的属性.而且,你只能通过类型或者名称自动装配Bean.如果这两种策略都不能满足你的需求,就必须明确地装配Bean. 1.12.2 解决方案 从Spring 2.5起,自动装配功能进行了多处改进.你可以通过用@Autowired或者@Resource(在JSR-250:Java平台常见注解中定

《Spring攻略(第2版)》——1.11 用XML配置自动装配Bean

1.11 用XML配置自动装配Bean 1.11.1 问题 当一个Bean需要访问另一个Bean时,你可以显式指定引用装配它.但是,如果你的容器能够自动装配Bean,就可以免去手工配置装配的麻烦. 1.11.2 解决方案 Spring IoC容器能够帮助你自动装配Bean.你只要在的autowire属性中指定自动装配模式就可以了.表1-2列出了Spring支持的自动装配模式. *默认模式是no,但是可以设置根元素的default-autowire属性修改.这个默认模式将被Bean自己指定的模式覆

使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定的学习曲线.开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案.在如何使用这些组件上

spring入门(8) 装配Bean之自动装配

Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配). byName,byType,constructor下面来分别介绍一下这些是如何自动装配的 <bean id="foo" class="...Foo" autowire="autowire type"> Mode            Explanation no: (Default

Spring自动装配的学习

在xml配置文件中,autowire有6种类型,可以在<bean/>元素中使用autowire属性指定: 模式 说明 no 不使用自动装配,必须通过ref元素指定依赖,默认设置. byName 根据属性名自动装配.此选项将检查容器并根据名字查找与 属性完全一致的bean,并将其与属性自动装配. byType 如果容器中存在一个与指定属性类型相同的bean,那么将与 该属性自动装配:如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配:如果没有找到相匹配的bean