- 浏览: 1230994 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
自动装配(autowire)协作者
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自动让Spring通过检查BeanFactory
中的内容,来替我们指定bean的协作者(其他被依赖的bean)。autowire一共有五种类型。由于autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥!
no | |
byName |
根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为 |
byType |
如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置 |
constructor |
与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。 |
autodetect |
通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。 |
示例:
我们可以看以下配置:
<bean id="bean2" class="com.lwf.bean.Bean2"> <property name="bean3" ref="bean3"/> <property name="bean4"> <ref bean="bean4"/> </property> <property name="bean5"> <bean id="bean5" class="com.lwf.bean.Bean5"> <property name="age" value="30"></property> </bean> </property> </bean>
<bean id="parentBean" abstract="true"> <property name="id" value="1"/> <property name="name" value="zhang"/> </bean> <bean id="bean3" class="com.lwf.bean.Bean3" parent="parentBean"> <property name="date" value="2010/05/19"/> </bean> <bean id="bean4" class="com.lwf.bean.Bean4" parent="parentBean"/>
我们可以看到bean2,bean3,bean4,bean5分别对应的类名为Bean2,Bean3,Bean4,Bean5
而Bean3,Bean4,Bean5分别为Bean2的成员属性,我们把成员属性的名字也定义为bean3,bean4,bean5即与配置文件中id的名字一致。
那么我们就可以使用自动装配来简化配置。
我们使用第一种:byName进行自动装配。在配置文件的beans标签增加属性:default-autowire="byName" 即可。
代码如下(本代码与前面一文中的使用bean继承相似):
package com.lwf.bean; public class Bean2 { private Bean3 bean3; private Bean4 bean4; private Bean5 bean5; public Bean3 getBean3() { return bean3; } public void setBean3(Bean3 bean3) { this.bean3 = bean3; } public Bean4 getBean4() { return bean4; } public void setBean4(Bean4 bean4) { this.bean4 = bean4; } public Bean5 getBean5() { return bean5; } public void setBean5(Bean5 bean5) { this.bean5 = bean5; } }
package com.lwf.bean; import java.util.Date; public class Bean3 { private int id; private String name; private Date date; 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; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
package com.lwf.bean; public class Bean4 { 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; } }
package com.lwf.bean; public class Bean5 { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
两个配置文件:
applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-autowire="byName" > <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date"> <bean class="com.lwf.bean.UtilDatePropertiesEditor"> <property name="format" value="yyyy/MM/dd"/> </bean> </entry> </map> </property> </bean> <!-- <bean id="bean2" class="com.lwf.bean.Bean2"> <property name="bean3" ref="bean3"/> <property name="bean4"> <ref bean="bean4"/> </property> <property name="bean5"> <bean id="bean5" class="com.lwf.bean.Bean5"> <property name="age" value="30"></property> </bean> </property> </bean> --> <bean id="bean2" class="com.lwf.bean.Bean2"/> <bean id="bean5" class="com.lwf.bean.Bean5"> <property name="age" value="33"></property> </bean> </beans>
applicationContext_1.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="parentBean" abstract="true"> <property name="id" value="1"/> <property name="name" value="zhang"/> </bean> <bean id="bean3" class="com.lwf.bean.Bean3" parent="parentBean"> <property name="date" value="2010/05/19"/> </bean> <bean id="bean4" class="com.lwf.bean.Bean4" parent="parentBean"/> </beans>
日期转换需要用到的类:
package com.lwf.bean; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class UtilDatePropertiesEditor extends PropertyEditorSupport { private String format="yyyy/MM/dd" ; public void setAsText(String text) throws IllegalArgumentException { SimpleDateFormat sdf = new SimpleDateFormat(format); try { Date dateVal = sdf.parse(text); this.setValue(dateVal); } catch (ParseException e) { e.printStackTrace(); } } public void setFormat(String format){ this.format = format; } }
测试类:
package com.lwf.client; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lwf.bean.Bean2; public class Client { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext*.xml"); Bean2 bean2 = (Bean2)ctx.getBean("bean2"); System.out.println(bean2.getBean3().getName()); System.out.println(bean2.getBean3().getId()); System.out.println(bean2.getBean3().getDate()); System.out.println(bean2.getBean4().getId()); System.out.println(bean2.getBean4().getName()); System.out.println(bean2.getBean5().getAge()); } }
输出结果:
2010-05-19 16:32:34,604 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0: display name [org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0]; startup date [Wed May 19 16:32:34 CST 2010]; root of context hierarchy 2010-05-19 16:32:34,760 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [D:\workdirlocal\spring_start\bin\applicationContext.xml] 2010-05-19 16:32:35,135 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [D:\workdirlocal\spring_start\bin\applicationContext_1.xml] 2010-05-19 16:32:35,213 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@3e86d0]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1adc30 2010-05-19 16:32:35,369 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1adc30: defining beans [customEditorConfigurer,bean2,bean5,parentBean,bean3,bean4]; root of factory hierarchy zhang 1 Wed May 19 00:00:00 CST 2010 1 zhang 33
名称自动装配注意:
一、类中定义的成员属性与配置文件中的id名称一致;
二、在Beans标签增加default-autowire="byName"属性
自动装配缺点:日后修改比较麻烦,如果实现自动装配日后修改配置文件还需要到类里面一一查看属性名称。
发表评论
-
spring 3 和mybatis 3集成,并用junit4进行测试
2011-11-04 14:01 1468转:spring 3 和mybatis 3集成,并用junit ... -
java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource的解决方法
2011-11-03 16:17 2752用Myeclipse开发struts时,配置struts-co ... -
Strut2+Spring整合框架搭建
2011-11-02 22:19 1081参考:http://lukuijun.iteye.com/bl ... -
Spring+hibernate延迟加载报错解决办法之二
2010-06-29 17:28 1215在做删除操作的时候出现了org.springframework ... -
Spring+hibernate延迟加载报错解决办法之一
2010-06-29 17:25 1214我们在项目中一般都会使用Spring来管理Hibernate的 ... -
Spring项目中怎么配置log4j
2010-05-27 11:10 1588在spring项目中配置log4j http://blogg ... -
Spring与Struts集成方式三
2010-05-26 17:11 1154在集成方式一和二中我们是在web.xml中加入配置代码: & ... -
Spring与Struts集成方式二
2010-05-26 14:49 1047在集成方式一的基础上做改进: 第一种集成方案是在action ... -
Spring与Struts集成方式一
2010-05-25 14:13 919我们在Struts中在action类中调用Model层组件进行 ... -
Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)
2010-05-24 17:15 2771采用编程式事务 事务主要分为:编程式事务和声明式事务 ... -
修改Eclipse配置,使得在配置文件中完成自动完成功能。
2010-05-24 15:10 2303在Eclipse中引入spring的配置文件applicati ... -
Spring aop 基于schema的AOP支持及JoinPoint的使用、如何使用CGLIB代理
2010-05-24 14:52 4133基于schema的aop只是将配置写到配置文件中。 代 ... -
Spring AOP 概念理解及@AspectJ支持
2010-05-20 15:56 1586为了更好的理解Spring简介一文http://quicker ... -
Spirng AOP简介
2010-05-19 17:28 2286AOP 面向切面编程(AOP)通过提供另外一种思考程序结构的 ... -
Spring Bean中的自动装配——byType
2010-05-19 17:08 1184自动装配byType即通过查找类属性在配置文件中bean中定义 ... -
Spring Bean的作用域:用Spring来解决Struts中Action的单实例问题
2010-05-19 10:47 1565我们知道在Struts中Action是从map中拿出来的,是单 ... -
Spring Bean定义的继承
2010-05-19 10:36 1330现有Bean2,Bean3,Bean4,Bean5 可观察到 ... -
Spring Set注入:基本类型、List、Map、Set、Array、Date类型注入
2010-05-18 15:58 11553Spring依赖注入有两种:构造器注入与Set注入 其中以S ... -
spring 初探
2010-05-17 16:53 1258Spring核心设计思想为IOC ... -
简单DAO层示例
2010-05-14 17:30 2085在使用spring架构之前,我们怎么设计自己的DAO层的呢? ...
相关推荐
在这个例子中,`myService`将通过byName自动装配获取`myDataSource`,而`myServiceWithType`则通过byType装配,但这里我们显式指定了依赖,以避免可能的多bean匹配问题。 **优缺点** byName自动装配简单直观,但...
这里的`autowire="byName"`指示Spring尝试找到一个名为`name`的Bean来自动装配到`Person`类的相应属性上。 Bean的继承是通过`parent`属性实现的,允许一个Bean继承另一个Bean的配置。这样可以重用和覆盖父Bean的...
然而,自动装配简化了这个过程,Spring容器会尝试根据类型或名称自动找到合适的依赖并注入到bean中。 在Spring 4中,自动装配主要有以下几种方式: 1. **无注解自动装配(No Annotation Auto-Wiring)**:在XML...
(2)byName:根据属性 名 自动装配,设值注入 <bean id="xxx" class="xxx" ></bean> (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 <bean class="xxx" ></bean> (4)constructor:与 ...
- byName:根据bean的属性名自动装配。如果bean的属性名为其他bean的id,那么Spring会尝试将这个bean注入。 - byType:根据属性的类型自动装配。Spring会查找与该属性类型匹配的bean,并将其注入。 - constructor:...
- `byName`:根据属性名称自动装配。 - `byType`:根据属性类型自动装配。如果有多个匹配,会报错。 - `constructor`:根据构造函数参数类型自动装配。 - `autodetect`:尝试检测并选择`constructor`或`byType`...
标题中的“Spring自动装配”指的是Spring框架中的一个重要特性,它允许开发者在不显式配置Bean依赖的情况下,由Spring容器自动管理Bean之间的依赖关系。这一特性极大地简化了代码,提高了可维护性和可测试性。 在...
其中,byName是指根据Bean对象的名称来进行自动装配,byType是指根据Bean对象的类型来进行自动装配,constructor是指使用构造方法来进行自动装配,autodetect是指自动选择byType或constructor的自动装配方式,no是指...
Spring提供了多种自动装配方式,如byType、byName等,可以根据配置或注解来实现。在项目中,通过配置Spring的bean定义,或者使用@Autowired注解,我们可以让Spring自动为我们的bean注入所需的依赖,简化了代码并增强...
本文将深入探讨Spring中的六种自动装配方式:byType、byName、no、constructor、autodetect和default。 1. byType(按类型装配) 当Spring容器在配置文件中找不到明确的通过`ref`属性指定的依赖时,会尝试通过类型...
本文将详细讲解Spring中自动装配Bean的三种主要方式:byName、byType以及constructor。这些方法帮助Spring的IoC容器自动识别并连接Bean的依赖,从而减少手动配置的工作量。 首先,我们来看第一种自动装配方式——`...
在Spring框架中,Bean装配是核心功能之一,它负责初始化、配置和管理应用程序中的对象。本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和...
在Spring框架中,自动装配(Autowiring)是一种机制,它允许Spring容器自动为bean提供其依赖,而无需显式配置。自动装配极大地简化了应用的配置,使得开发者可以更专注于业务逻辑。本文将深入探讨Spring自动装配的...
Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,byType则是根据属性类型匹配bean的类型。constructor和autodetect则分别处理构造函数参数和属性的...
例如,在 User Bean 中有一个属性 myRole,可以使用 byName 自动装配来将名称为 myRole 的 Role Bean 自动装配到 User Bean 中。 2. byType 自动装配 byType 自动装配是指根据 Bean 的类型来自动装配依赖关系。...
Spring中自动装配的4种方式 在 Spring 框架中,自动装配是指容器可以自动将 Bean 之间的关系装配起来,不需要手动配置,从而简化了 XML 配置文件的编写。下面将详细介绍 Spring 中的 4 种自动装配方式。 byName ...
1. **byName**:基于bean的名称进行自动装配。当Spring容器在bean的属性上发现@Autowired注解时,如果没有指定qualifier,那么Spring会尝试找到一个与该属性名称相同的bean来注入。 2. **byType**:基于bean的类型...
默认情况下,配置文件中需要通过ref装配Bean,但设置了autowire="byName",Spring会在配置文件中自动寻找与属性名字personDao相同的bean,找到后,通过调用setPersonDao(PersonDao personDao)方法将id为personDao的...
当设置自动装配模式为`byName`时,Spring容器会尝试根据Bean的属性名称来查找具有相同ID或name的其他Bean,并将其作为依赖注入到当前Bean中。这种方式适用于属性名称和依赖Bean的ID或name一致的情况。 **优点**: -...