创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质。

  Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些bean并且如何将其装配在一起。

  1、Spring提供了三种主要的装配机制

  • 在XML文件中进行显示装配;
  • 在Java代码中显示装配;(JavaConfig)
  • 隐式的bean发现机制和自动装配;(注解)

  

  2、如何选择装配机制?

  完全可以灵活配置。

  但作者建议尽可能地使用自动装配机制,且显示配置越少越好。

  当必须显示配置bean(有些源码不是由你维护,而你需要为这些代码配置bean),作者推荐使用类型安全并且比XML更加强大的JavaConfig。

  只有当你想使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才应该使用XML。

  3、Spring怎么实现自动化装配?

  • 组件扫描(component scanning):Spring自动发现应用上下文所创建的bean;
  • 自动装配(autowiring):Spring自动满足bean之间的依赖

  两者组合能发挥强大的威力,能够将显示配置降低到最少。

  需要了解的是,在自动装配时,不要在意装配的bean来自哪里。自动装配机制会考虑到容器中所有的bean,不管它是在JavaConfig or XML中声明还是通过组件扫描获取到的。只要bean在同一个Spring应用上下文中就行。

  4、几种开启组件扫描的方式:

  JavaConfig:

/*这是一个用于专用于设置配置的Java类*/
@Configuration  //声明这是配置类
@ComponentScan //开启组件扫描
public class JavaConfigClass{ }

  @ComponentScan  默认扫描与配置类相同的包(肯定就包括子包啦)。

  @ComponentScan(basePackages={“Package1”,“Package2”})也可以通过basePackages属性指定一个或者多个基础包,但是这样并不安全。

  @ComponentScan(basePackages={AAA.class,BBB.class}),这些类所在包会作为组件扫描的基础包。还可以专门创建一个空标记接口,用于标记基础包,这样可以保持对重构的友好。

  XML:

<context:component-scan base-package="com.biguo.xxx"/>

  

  5、自动装配中的注解

  @Component("String ID"):该类会作为组件类,并告知Spring要为这个类创建bean。

  Spring应用上下文中所有的bean都会给定一个ID,若没有明确指定,Spring会根据类名为其指定一个ID,默认为把类名第一个字母小写。

  (JavaConfig中,@Named("String ID")效果相同)

  @Autowired

  常用于构造器、setter方法,当Spring创建它们所在对象的bean时,会传入一个相应参数类型的bean,即自动满足所创建bean 的(对另一个bean的)依赖。

  (这里就要考虑所依赖的bean存在不存在、有多少个的问题啦)

  (JavaConfig中,为@Inject)

   

  6、JavaConfig中声明bean

  @Bean——告诉Spring这个方法返回一个对象,该对象要注册为Spring应用上下文中的bean,bean的默认ID和这个方法名一致,也可以用name属性自定义啦。

  Spring会拦截所有对@Bean注解的方法的调用,确保直接返回这个方法创建的bean,而不是让其执行实际调用。 (这个bean还可以重复使用,因为Spring默认单例模式)

  7、关于混合配置

  JavaConfig中引用XML配置——@Import(xx.class)、@ImportResource("classpath:xxx.config.xml")

  XML配置中引用JavConfig~~~

Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire的更多相关文章

  1. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  2. Spring入门2. IoC中装配Bean

    Spring入门2. IoC中装配Bean 20131125 前言: 上一节学习了Spring在JavaProject中的配置,通过配置文件利用BeanFactory和ApplicationConte ...

  3. 7 -- Spring的基本用法 -- 7... 创建Bean的3种方式

    7.7 创建Bean的3种方式 ① 调用构造器创建Bean. ② 调用静态工厂方法创建Bean. ③ 调用实例工厂方法创建Bean. 7.7.1 使用构造器创建Bean实例. 使用构造器来创建Bean ...

  4. spring实战第二章小记-装配bean

    时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个 ...

  5. Spring实战——通过Java代码装配bean

    上篇说的是无需半行xml配置完成bean的自动化注入.这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果. 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如 ...

  6. Spring自动装配Bean的五种方式

    在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...

  7. 001-Spring在代码中获取bean的几种方式

    一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...

  8. Spring在代码中获取bean的几种方式

    方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObj ...

  9. Spring在代码中获取bean的几种方式(转:http://www.dexcoder.com/selfly/article/326)

    方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObj ...

随机推荐

  1. SpringBoot使用Undertow做服务器

    说明 undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验.然而:当下微服务兴 ...

  2. elasticsearch head插件(5.0及以上版本)

    官方参考地址:https://github.com/mobz/elasticsearch-head5.0及以上版本安装参考地址:http://www.cnblogs.com/jstarseven/p/ ...

  3. BZOJ3907网格

    这东西是拿Cat思想搞得组合数学. 首先做这个需要会用网格法或折线法分析Cat的$C_{2n}^n-C_{2n}^{n-1}$是怎么来的. 网格法:假如没有限制,从(0,0)到(n,n)的方案数为$C ...

  4. js-常见算法操作

    字符串操作 判断回文字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function palindrome(str){  // \W匹配任何非单词字符.等价于“[^A-Za- ...

  5. 异步机制 - Overlapped

    1 前面说到 GetOverlappedResult的bWait含义 GetOverlappedResult的bWait含义表示是否需要等待,如果IO还处于PENDING状态,内部大概实现是这样 hO ...

  6. CDH构建大数据平台-Kerberos高可用部署【完结篇】

    CDH构建大数据平台-Kerberos高可用部署[完结篇] 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.安装Kerberos相关的软件包并同步配置文件 1>.实验环境 ...

  7. SQL-W3School-高级:SQL ALTER TABLE 语句

    ylbtech-SQL-W3School-高级:SQL ALTER TABLE 语句 1.返回顶部 1. ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. ...

  8. SQL-W3School-高级:SQL BETWEEN 操作符

    ylbtech-SQL-W3School-高级:SQL BETWEEN 操作符 1.返回顶部 1. BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围. BETWEE ...

  9. 005-html+js+spring multipart文件上传

    一.概述 需求:通过html+js+java上传最大500M的文件,需要做MD5 消息摘要以及SHA256签名,文件上传至云存储 1.1.理解http协议 https://www.cnblogs.co ...

  10. OpenLDAP管理命令详解

    一.OpenLDAP命令汇总 ldapsearch:搜索 OpenLDAP 目录树条目. ldapadd:通过 LDIF 格式,添加目录树条目. ldapdelete:删除 OpenLDAP 目录树条 ...