Spring入门(Bean自动装配)
来源:互联网 发布:zabbix的端口号是多少 编辑:程序博客网 时间:2024/06/04 19:35
Autowiring自动装配
有哪些类型
No:不做任何操作(默认的)。
byname:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动匹配。如果重复的话,IOC容器启动就会失败,不能存在两个相同的id。
byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动匹配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动匹配;如果没有找到相匹配的bean,则什么事都不发生。
Constructor:与byType方式类似,不同之处在于它应用于构造器函数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常。
例子
先创建AutoWiringDAO和AutoWiringService两个类,然后将他们配置到Spring的配置文件中。
<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService" ></bean><bean id="autoWiringDAO" class="com.imooc.autowiring.AutoWiringDAO" ></bean>
通过在beans标签下设置default-autowire来自动装配
然后在AutoWiringDAO里边定义一个say方法
public class AutoWiringDAO { public void say(String word) { System.out.println("AutoWiringDAO : " + word); }}
然后是Service中的操作
采用的设值注入的方式.
首先生成AutoWiringDAO的set方法,然后定义Service的say方法,在里边调用DAO的say方法。
public class AutoWiringService { private AutoWiringDAO autoWiringDAO; //构造方法 public AutoWiringService(AutoWiringDAO autoWiringDAO) { System.out.println("AutoWiringService"); this.autoWiringDAO = autoWiringDAO; } public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) { System.out.println("setAutoWiringDAO"); this.autoWiringDAO = autoWiringDAO; } public void say(String word) { this.autoWiringDAO.say(word); }}
按照之前的设值注入的配置方法,在xml文件里应该是
<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService" > <property name="autoWiringDAO" ref="sutoWiringDAO"></property></bean>
但是有了根据name的自动配置后,也就是default-autowire=”byName”,不需要property标签。只需要定义好bean,然后在引用的bean(AutoWiringService)中声明set方法和它的属性,被引用的bean(AutoWiringDAO)中不需要做任何操作。
单元测试类
@RunWith(BlockJUnit4ClassRunner.class)public class TestAutoWiring extends UnitTestBase { public TestAutoWiring() { super("classpath:spring-autowiring.xml"); } @Test public void testSay() { AutoWiringService service = super.getBean("autoWiringService"); service.say(" this is a test"); }}
这里service的say调用DAO的say,最终输出AutoWiringDAO:this is a test。
那么set这个方法是如何被执行的?
因为设置了default-autowire=”byName”,set为了将值赋给private的那个属性autoWiringDAO,在会在spring文件中寻找和autoWiringDAO完全一致的bean的id(对应的类AutoWiringDAO),将它的实例赋给那个属性(this.autoWiringDAO = autoWiringDAO(这个是实例))。
也就是说用这种默认的自动装配的方式可以减少我们在配置bean时的代码行数,使整个bean的配置看起来更简洁。
前边的是byName,如果是byType很类似,就是寻找对应的class,和bean的id没有直接的关系,甚至可以把id=”autoWiringDAO”删掉。
如果是default-autowire=”constructor”,在Service中写构造方法,之前已经写了
//构造方法public AutoWiringService(AutoWiringDAO autoWiringDAO) { System.out.println("AutoWiringService"); this.autoWiringDAO = autoWiringDAO;}
根据构造器注入,是在IOC容器中查找构造器方法传入参数的类型在IOC容器中是否有相应类型的bean的实例,和id并没有严格的关系。
- Spring入门(Bean自动装配)
- 自动装配bean【Spring 入门】
- spring入门(8)--装配Bean之自动装配
- Spring入门——Bean的自动装配(Autowring)
- Spring入门笔记(三)Bean--Aware、自动装配、Resources
- Spring Bean装配-自动装配
- Spring Bean--自动装配
- Spring Bean 自动装配
- spring自动装配bean
- Spring框架自动装配 Bean(三)
- Spring入门(Bean装配,Autowired注解)
- Spring入门(Bean装配,@Qualifier)
- spring基础-Bean的装配方式(三)自动装配
- Spring Bean装配之自动装配
- Spring Bean的装配 -- 自动装配
- spring bean autowire自动装配
- spring注解自动装配Bean
- spring自动装配Bean属性
- springboot打包为war包
- Android----各种效果的3DViewPager效果(一)
- 从零开始的"E"世界(J2SE)
- C++设计模式之适配器模式
- 蓝桥杯 因式分解
- Spring入门(Bean自动装配)
- MapReduce项目书写
- wireshark使用基础问题
- C++ 中vector和list的区别
- super关键字的使用
- 添加事件attachEvent和addEventListener
- 01-- git历史--git学习
- springboot的junit测试和多个模块cxf暴露接口问题
- 线段树 面积并 模板题