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的装配方式相关推荐

  1. java 自动装配_spring自动装配是什么?spring自动装配方式

    Spring是受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员都在使用 Spring 框架创建高性能.易于测试和可重用的代码. 自动装配是Spring框架的重要功能,是使用Sp ...

  2. spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10

    一.Bean的作用域 Spring在初始化一个Bean实例时,可以同时为其指定特定的作用域.作用域将会对Bean的生命周期和创建方式产生影响. Bean的作用域类型: Singleton作用域是Spr ...

  3. spring框架学习(一):Bean的装配方式 ——基于注解的装配、自动装配

    Bean的装配方式 基于注解装配 常用注解: 总结 自动装配 [序言] 在前面的例子中我们就可以看到了使用基于XML方式的缺点了:如果应用中有较多的Bean对象,则会导致xml文件过于臃肿,给后续的维 ...

  4. 学习篇(一)- Spring自动装配的方式

    Spring自动装配的方式 1. 什么是自动装配? ​ 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...

  5. Spring自动装配的方式

    Spring自动装配的方式 Spring 装配包括手动装配和自动装配,手动装配是有基于xml 装配.构造方法.setter 方法等 自动装配有五种自动装配的方式,可以用来指导Spring 容器用自动装 ...

  6. spring入门第二讲 bean的生命周期 装配方式 Spring整合Junit

    bean的生命周期 实体类 //初始化 public void init(){System.out.println("--初始化--"); }//销毁 public void de ...

  7. spring自动装配Bean的五种方式

    no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系 byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配 byType:根据bean的类型 ...

  8. WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService

    在现今的Web 应用中经常使用Spring 框架来装载JavaBean .如果要想将某些在Spring 中装配的JavaBean 发布成WebService ,使用Axis2 的Spring 感知功能 ...

  9. Spring(3)——装配 Spring Bean 详解

    装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...

  10. 四、spring中高级装配(2)

    这个是接着上一篇写的,这章内容较多,分开来记录一下... 三.处理自动装配的歧义性 自动装配让spring完全负责bean引用注入到构造参数和属性中,不过,仅有一个bean匹配所需的结果时,自动装配才 ...

最新文章

  1. Java项目:进销存系统(java+Gui)
  2. oracle数据库dba密码,Oracle数据库的找回DBA账户的密码
  3. POJ 2299 Ultra-QuickSort(树状数组 + 离散)
  4. EditText的 焦点事件 setOnFocusChangeListener
  5. 【转】提高PHP性能的53个技巧
  6. 利用5w1h写出高效的git commit
  7. 标准正态均一性检验 matlab程序,多种均一性检验方法比较研究
  8. Java Web 开发的目录结构
  9. 【CPI指数预测】基于matlab BP神经网络CPI指数预测【含Matlab源码 662期】
  10. 对抗攻击经典论文剖析(上)【FGSM、BIM、PGD、Carlini and Wagner Attacks (CW)】
  11. 【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
  12. 微信小程序成语小秀才,成语接龙超详细搭建教程
  13. python高逼格动态图_微信编辑哪里找高逼格 GIF 动图?
  14. happens-before的法则
  15. Java接口中的方法和常量
  16. 错题本——数据结构(线性表)
  17. 程序员送女朋友的新年礼物
  18. word文章目录页码问题
  19. beego框架orm操作exper的操作
  20. 公共管理老师赴英国G5名校-伦敦大学学院CSC公派访学

热门文章

  1. git中rejected的解决方法
  2. unity3d通过粒子系统制作火焰效果
  3. Kubernetes 健康状态检查liveness和readiness
  4. 基金定投应该什么时候终止?
  5. windows7怎么安装android,安卓手机如何装win7系统
  6. 微软内存测试软件,内存检测工具Microsoft Windows Memory Diagnostic是用说明
  7. firefox金山词霸取词
  8. 多自由度有阻尼matlab,有阻尼多自由度系统固有频率、阻尼的求取
  9. 怎么快速找到:附近的人
  10. 基于Java SpringBoot的电影院管理系统设计与实现毕业设计源码011633