Spring的装配方式
Spring的装配方式
- 参考资料
- no
- byName和byType
- constructor
- autodetect
- 小结
参考资料
Spring - bean的autowire属性(自动装配)
Spring 自动装配
spring byType和byName 是什么意思
no
Spring中默认的方式,它不能进行自动装配,不采用autowire机制.,需要使用依赖注入,只能用<ref/>
标签,手动设置Bean的依赖关系。
<!--使用bean标签去申明bean--><bean id="waiter" class="com.fang.spring.Waiter" /><!--可以保用p标签来注入依赖的bean--><bean id="store" class="com.fang.spring.Store"><property name="waiter" ref="waiter"></property></bean><!-- 下面这种方式要使用p标签xmlns:p="http://www.springframework.org/schema/p" --><!-- <bean id="store" class="com.fang.spring.Store" p:waiter-ref="waiter" />-->
byName和byType
这种两种方式都需要我们在Java类里设置setter方法,不同的是,byName是通过属性的名称(name或者id)自动装配(注入),Spring会在容器中查找名称与bean属性名称一致的bean,并自动注入到bean属性中。例如:beanA有一个属性eat,它的id设置为eat,那么它的setter方法要设置成setEat(E大小写都没事,不过还是要命名规范)。
这里有点小郁闷,很多人都说在beans标签加这个属性default-autowire=“byName”,但是老是通不过测试,beans标签不允许这个属性的设置,所以只能在bean标签设置了。
<bean id="waiter" class="com.fang.spring.Waiter" autowire="byName"/><bean id="store" class="com.fang.spring.Store" autowire="byName"/>
补充,在执行<bean id="waiter" class="com.fang.spring.Waiter" autowire="byName"/>
这一句的时候, Spring框架将Waiter这个实体类整个编译一下, 看看自己的这个类里面有几个属性(类型是实体类的属性, 不能是简单类型), 然后和ApplicationContext的配置文件一通对比, 如果有bean的id能跟自己的setter方法对上名字, 就把这个bean装载到自己的这个类里面。
byType则是通过类型自动装配(注入),Spring会在容器中查找类(Class)与bean属性类一致的bean,并自动注入到bean属性中,如果容器中包含多个这个类型的bean,Spring将抛出异常(就是不能存在多个bean的class指向同一个实体,而且都是byType类型注入的)。如果没有找到这个类型的bean,那么注入动作将不会执行。这样说可能很难理解,其实就是和setter方法中的参数类型有关。
<bean id="waiter" class="com.fang.spring.Waiter" autowire="byType"/><bean id="store" class="com.fang.spring.Store" autowire="byType"/><!--根据配置文件编译Store,里面有Waiter类型,配置文件里有com.fang.spring.Waiter,于是装载-->public class Store {@SuppressWarnings("unused")private Waiter waiter; public Store() {System.out.println("士多店被初始化");}public void setWaiter(Waiter waiter) {this.waiter = waiter;System.out.println("设置士多店");}}
constructor
类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。
假设Store有构造函数public Store(Waiter waiter),那么Spring会在容器中查找类型为Store的bean通过构造函数Store(Wai ter waiter)注入到A中。与byType一样,如果存在多个bean类型为Store,则会抛出异常,另外,如果在容器中找不到匹配的类型的bean,将抛出异常,因为Spring无法调用构造函数实例化这个bean。
<bean id="waiter" class="com.fang.spring.Waiter" autowire="byType"/><bean id="store" class="com.fang.spring.Store" ><constructor-arg name="waiter" ref="waiter"></constructor-arg></bean>//Store类的构造方法public Store(Waiter waiter) {System.out.println("士多店被初始化之构造方法");}
autodetect
autodetect其实还是通过constructor或者byType实现的,如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。
小结
自动装配没有自定义装配方式那么精确,而且不能自动装配简单属性(基本类型、字符串等),在使用时应注意。另一方面,自动装配功能和手动装配如果同时使用,那么自动装配就不起作用。
在 Bean 配置文件里设置 autowire 属性进行自动装配将会装配 Bean 的所有属性。 然而, 若只希望装配个别属性时,autowi re 属性就不够灵活了.。autowire 属性要么根据类型自动装配,,要么根据名称自动装配,不能两者兼而有之。
Spring4.0新出了很多注解,通过注解的方式可以简化配置文件定义bean的方式,如通过@Configuration注解定义Bean。
Spring的装配方式相关推荐
- java 自动装配_spring自动装配是什么?spring自动装配方式
Spring是受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员都在使用 Spring 框架创建高性能.易于测试和可重用的代码. 自动装配是Spring框架的重要功能,是使用Sp ...
- spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10
一.Bean的作用域 Spring在初始化一个Bean实例时,可以同时为其指定特定的作用域.作用域将会对Bean的生命周期和创建方式产生影响. Bean的作用域类型: Singleton作用域是Spr ...
- spring框架学习(一):Bean的装配方式 ——基于注解的装配、自动装配
Bean的装配方式 基于注解装配 常用注解: 总结 自动装配 [序言] 在前面的例子中我们就可以看到了使用基于XML方式的缺点了:如果应用中有较多的Bean对象,则会导致xml文件过于臃肿,给后续的维 ...
- 学习篇(一)- Spring自动装配的方式
Spring自动装配的方式 1. 什么是自动装配? 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...
- Spring自动装配的方式
Spring自动装配的方式 Spring 装配包括手动装配和自动装配,手动装配是有基于xml 装配.构造方法.setter 方法等 自动装配有五种自动装配的方式,可以用来指导Spring 容器用自动装 ...
- spring入门第二讲 bean的生命周期 装配方式 Spring整合Junit
bean的生命周期 实体类 //初始化 public void init(){System.out.println("--初始化--"); }//销毁 public void de ...
- spring自动装配Bean的五种方式
no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系 byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配 byType:根据bean的类型 ...
- WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
在现今的Web 应用中经常使用Spring 框架来装载JavaBean .如果要想将某些在Spring 中装配的JavaBean 发布成WebService ,使用Axis2 的Spring 感知功能 ...
- Spring(3)——装配 Spring Bean 详解
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
- 四、spring中高级装配(2)
这个是接着上一篇写的,这章内容较多,分开来记录一下... 三.处理自动装配的歧义性 自动装配让spring完全负责bean引用注入到构造参数和属性中,不过,仅有一个bean匹配所需的结果时,自动装配才 ...
最新文章
- Java项目:进销存系统(java+Gui)
- oracle数据库dba密码,Oracle数据库的找回DBA账户的密码
- POJ 2299 Ultra-QuickSort(树状数组 + 离散)
- EditText的 焦点事件 setOnFocusChangeListener
- 【转】提高PHP性能的53个技巧
- 利用5w1h写出高效的git commit
- 标准正态均一性检验 matlab程序,多种均一性检验方法比较研究
- Java Web 开发的目录结构
- 【CPI指数预测】基于matlab BP神经网络CPI指数预测【含Matlab源码 662期】
- 对抗攻击经典论文剖析(上)【FGSM、BIM、PGD、Carlini and Wagner Attacks (CW)】
- 【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
- 微信小程序成语小秀才,成语接龙超详细搭建教程
- python高逼格动态图_微信编辑哪里找高逼格 GIF 动图?
- happens-before的法则
- Java接口中的方法和常量
- 错题本——数据结构(线性表)
- 程序员送女朋友的新年礼物
- word文章目录页码问题
- beego框架orm操作exper的操作
- 公共管理老师赴英国G5名校-伦敦大学学院CSC公派访学