spring提供了3种类型的自己主动装配

  • byName:把与Bean的属性具有同样名字(或者ID)的其它Bean自己主动装配到Bean的相应属性中。
  • byType:把与Bean的属性具有同样类型的其它Bean自己主动装配到Bean的相应属性中。
  • constructor:把与Bean的构造器入參具有同样类型的其它Bean自己主动装配到Bean的相应属性中。

byName自己主动装配



	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="byName">
<property name="id" value="1"/>
<property name="roleName" value="管理员"/>
<!-- 能够不须要用ref去关联bean了 -->
<!-- <property name="users" ref="users"/> -->
</bean>
<bean id="users" class="cn.com.ztz.spring.model.Users">
<property name="id" value="2"/>
<property name="name" value="张三"/>
</bean>

byName自己主动装配遵循一项约定:为属性自己主动装配ID与该属性名字同样的Bean。通过设置autowire="byName"来自己主动装配。



byType自己主动装配



	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="byType">
<property name="id" value="1"/>
<property name="roleName" value="管理员"/>
<!-- 能够不须要用ref去关联bean了 -->
<!-- <property name="users" ref="users"/> -->
</bean>
<!-- 删除掉Bean的id,也能够正确装配 -->
<bean class="cn.com.ztz.spring.model.Users">
<property name="id" value="2"/>
<property name="name" value="张三"/>
</bean>

byType自己主动装配存在一个局限性:假设Spring寻找到多个Bean。他们的类型与须要自己主动装配的属性类型都相匹配,怎么办?Spring提供另外两种选择,能够为自己主动装配标识一个首选Bean。或者取消某个Bean自己主动装配的候选资格。

为自己主动装配标识一个首选Bean,能够使用<bean>元素primary属性。primary属性默认值是true,这就意味着不存在首选Bean。

我们能够把别的Bean的primary设置false来达到效果。

为自己主动装配排除一个Bean,能够使用<bean>元素的autowire-candidate属性。设置值为false。



constructor自己主动装配


	<bean id="roles" class="cn.com.ztz.spring.model.Roles" autowire="constructor">
<constructor-arg name="id" value="1"/>
<constructor-arg name="roleName" value="管理员"/>
<!-- 能够不须要用ref去关联bean了 -->
<!-- <constructor-arg name="users" ref="users"/> -->
</bean>
<!-- 删除掉Bean的id,也能够正确装配 -->
<bean class="cn.com.ztz.spring.model.Users">
<constructor-arg name="id" value="2"/>
<constructor-arg name="name" value="张三"/>
</bean>

constructor自己主动装配跟byType自己主动装配有同样的局限性。

当发现多个Bean匹配某个构造器的入參,Spring也不会去尝试哪个构造器更适合使用。



默认自己主动装配



假设须要为Spring应用上下文的每个Bean配置同样的autowire属性,那么我们能够在<beans>元素添加一个default-autowire属性。



警告:在实际开发中。尽管自己主动装配能使我们开发速度变快。可是在维护中须要花费非常多的时间。所以我建议还是显示的装配比較好。




spring自己主动装配Bean属性的更多相关文章

  1. spring实战一:装配bean之注入Bean属性

    内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spri ...

  2. Spring入门(5)-自动装配Bean属性

    Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...

  3. Spring总结 1.装配bean

    本随笔内容要点如下: 依赖注入 Spring装配bean的方式 条件化装配 一.依赖注入 我理解的依赖注入是这样的:所谓的依赖,就是对象所依赖的其他对象.Spring提供了一个bean容器,它负责创建 ...

  4. Spring 之自动化装配 bean 尝试

    [Spring之自动化装配bean尝试] 1.添加dependencies如下所示(不是每一个都用得到 <dependencies> <dependency> <grou ...

  5. spring的自动装配Bean与自动检测Bean

    spring可以通过编写XML来配置Bean,也可以通过使用spring的注解来装配Bean. 1.自动装配与自动检测: 自动装配:让spring自动识别如何装配bean的依赖关系,减少对<pr ...

  6. spring中自动装配bean

    首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component p ...

  7. Spring学习笔记—装配Bean

    在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...

  8. spring实战三装配bean之Bean的作用域以及初始化和销毁Bean

    1.Bean的作用域 所有的spring bean默认都是单例.当容器分配一个Bean时,不论是通过装配还是调用容器的getBean()方法,它总是返回Bean的同一个实例.有时候需要每次请求时都获得 ...

  9. Spring框架---IOC装配Bean

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

随机推荐

  1. <div>之定位

    在使用盒子模型的过程中,如何放置各种类型的“盒子”,就存在定位.浮动等问题.下面就日常运用过程中出现过的情况总结如下(陆续加入中....) 一.图片直接做<div>的背景 在<div ...

  2. CodeForces 32C Flea

    题目链接:http://codeforces.com/problemset/problem/32/C 本文链接:http://www.cnblogs.com/Ash-ly/p/5513436.html ...

  3. Django项目静态文件加载失败问题

    在我们平时的开发过程中,为了方便调试程序,我们都是打开开发者模式,即Debug=True,当我们正式上线的时候肯定就需要把开发者模式关掉,用uwsgi部署上去以后,突然发现我们平时辛苦做的项目的静态文 ...

  4. P1162 填涂颜色 洛谷

    题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  5. Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)

    题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系. 思路: 最大独立集,必然是二分图. 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建 ...

  6. 25、Django实战第25天:讲师详情页

    1.复制teacher-detail.html到templates目录下 2.编辑teacher-detail.html,继承base.html 3.编辑organization.view.py cl ...

  7. inline select

  8. 【计算几何】 Codeforces Beta Round #67 (Div. 2) E. Ship's Shortest Path

    读懂题意其实是模板题.就是细节略多. #include<cstdio> #include<cmath> #include<algorithm> using name ...

  9. 【字符串哈希】bzoj3916 [Baltic2014]friends

    枚举断点,哈希判断. #include<cstdio> using namespace std; typedef unsigned long long ull; ull hs,hs1,hs ...

  10. Asp.Net MVC part2 View、Controller详解

    View详解Razor视图引擎简介HtmlHelper强类型页面 Razor视图引擎简介强大的@:表示使用C#代码,相当于aspx中的<%%>可以完成输出功能当遇到html标签时会认为C# ...