Spring之自动装配
来源:互联网 发布:天猫商城淘宝店 编辑:程序博客网 时间:2024/05/16 07:45
<bean>元素的autowire属性负责自动装配<bean>标签定义的JavaBean的属性。这样代码显得简洁美观,负面影响是自动装配之后,无法从配置文件中读懂JavaBean需要什么属性。
一、按名称装配
通过byname属性以属性名区分自动装配。在容器中寻找与JavaBean属性名相同的JavaBean,并将其自动装配到JavaBean中。
示例如下:
User对象,引用上一文的:
package com.home.web.dto;public class User { private String name; private Integer age; private String sex; public User() { super(); } public User(String name, Integer age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}
定义PrintInfo类,将User注入到PrintInfo对象中,并提供操作方法:
PrintInfo:
package com.home.web.dto;public class PrintInfo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void printUser() { System.out.println("PrintInfo打印User属性"); System.out.println("------------------"); System.out.println("用户姓名:" + user.getName()); System.out.println("用户年龄:" + user.getAge()); System.out.println("用户性别:" + user.getSex()); }}
applicationContextx.xml中相关配置:
<!-- User Bean --><bean name="user" class="com.home.web.dto.User"><constructor-arg index="0" type="String"><value>小明</value></constructor-arg ><constructor-arg index="1" type="Integer"><value>25</value></constructor-arg ><constructor-arg index="2" type="String"><value>男</value></constructor-arg></bean><!-- PrintInfo Bean --><bean autowire="byName" id="printinfo" class="com.home.web.dto.PrintInfo"/>
下面是Manger类:
package com.home.web.manager;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import com.home.web.dto.PrintInfo;public class Manager { public static void main(String[] args) { Resource resource = new ClassPathResource("applicationContext.xml"); BeanFactory factory = new XmlBeanFactory(resource); PrintInfo printInfo = (PrintInfo) factory.getBean("printinfo"); printInfo.printUser(); }}
二、按bean类型装配:
Spring以bean类型区分自动装配,这次容器匹配的不再是bean的名称。容器会自动找寻与JavaBean的属性类型相同的JavaBean的定义,并将其注入到需要自动装配的JavaBean中。
配置:
<!-- PrintInfo Bean --><bean autowire="byType" id="printinfo" class="com.home.web.dto.PrintInfo"/>其他地方跟前面一样。
三、其他方式
1、no属性
这是autowire采用的默认值,它采用自动装配。必须使用ref直接引用其他bean。这样可以增加代码可读性,并且不易出错。
2、constructor属性
通过构造方法的参数类型自动装配。会自动寻找构造方法参数类型相同的bean进行装配,它与byType类型存在相同的无法识别自动装配的情况。
3、autodetect属性
它首先是要构造器方式自动装配,然后是要byType方式。同样存在他们相同的异常情况,建议把容易出现问题的JavaBean使用手动装配注入依赖属性。
四、自动装配优点和缺点:
1、优点
能显著减少配置数量。不过采用bean模板也可以达到同样目的。
自动装配可以使用配置与Java代码同步更新。推荐在开发过程中采用自动装配,而在系统趋于稳定时改为显示装配的方式。
2、缺点
Spring会尽量避免在装配不明确时进行猜测,因为可能出现难以预料的结果。而且 Spring所管理的对象之间的关联关系也不再能清晰地进行文档化。
如果采用byType方式,那么容器中类型与自动装配的bean的属性或构造方法参数一致的bean只能有一个。如果存在多个就要考虑显示装配。
- Spring之自动装配
- Spring之自动装配
- Spring之自动装配
- Spring之自动装配
- Spring之自动装配
- Spring Bean装配之自动装配
- spring annotation 之 自动装配
- spring之自动装配autowire
- Spring框架之自动装配
- Spring之自动装配注入
- spring学习之自动装配
- 5.1.Spring之自动装配
- 【spring教程之八】spring自动装配
- spring入门(8)--装配Bean之自动装配
- Spring装配Bean之组件扫描和自动装配
- Spring装配Bean之组件扫描和自动装配
- Spring装配Bean之组件扫描和自动装配
- 《Pro Spring》学习笔记之自动装配
- SQL_server的神技开发利器 SQLPrompt 两个工具统统含有注册码
- 连接字符串设置(Web.config配置)
- android 获取验证码的 按钮
- jenkins 配置本地SVN
- 接口和抽象类区别
- Spring之自动装配
- spool
- QRCode与QRCode.js生成二维码
- 关于CAD2008的一个bug
- iOS10 RSA加解密为空,SecItemAdd statues = -34018
- vue.js中的vue-cli中各个文件简单介绍
- c# dapper 动态参数
- Spring AOP 深入剖析
- 封装分页