Spring容器负责创建应用程序中的bean并通过依赖注入来协调这些对象之间的关系。但是,作为开发人员,要告诉Spring需要创建哪些bean并且如何将其装配在一起。当描述bean如何装配时,Spring提供了两种主要的配置方式。

基于Java的配置

隐式配置

Spring通过组件扫描来实现隐式配置。

组件扫描

  • 如果在类上使用了@Component注解,则表明该类会作为组件类,并告知Spring要为这个类创建bean。
  • 组件扫描默认不开启,需要在配置类上使用@ComponentScan注解。默认情况下@ComponentScan会扫描与配置类相同的包。任何这个包以及这个包下的所有子包中带有@Component注解的类都会被扫描。
  • 可以为@ComponentScan设置basePackages属性来显式指定要扫描的基础包。指定时有三种实现方式:
    • String的形式来指定 - @ComponentScan(basePackages="myPackage")。此方式类型不安全,重构代码后指定的基础包可能会出现错误。
    • 指定为包中所含的类或接口 - @ComponentScan(basePackages="Student.class")
    • 创建一个用来进行扫描的空标记接口。(推荐)
  • 使用了@Component注解的会得到一个类名首字母小写的bean ID。

显式配置

有些时候是不太适合使用隐式装配的,比如要将第三方库中的组件装配到自己的代码的时候。

  • 需要为配置类添加一个@Configuration注解,表明该类是一个配置类,包含了如何Spring容器如何创建bean的细节。
  • 要在配置类中声明bean,需要编写一个带有@Bean注解的方法,这个方法会创建所需类型的实例并返回。@Bean注解会告诉Spring该方法将会返回一个对象,该对象要注册成为Spring应用上下文中的bean,方法体中包含了产生bean实例的逻辑。
  • 默认情况下,生成的bean ID和带有@Bean的方法的方法名相同。
  • 对带有@Bean注解的方法的所有调用都会被Spring拦截,以此确保会直接返回该方法所创建的bean,而不是每次都对其进行实际调用。
  • 可以在配置类中直接引用其它的bean而不需加@autowired注解。

自动装配

简单来说,自动装配就是让Spring自动满足依赖的一种方法,在满足依赖的过程中,会在Spring上下文中寻找所需要的其它bean。为了声明要进行自动装配,可以使用@Autowired注解。

  • @Autowired注解可以用在类的任何方法上。
  • @Autowired会根据所需bean的类型来进行搜索。
  • 如果没有匹配的bean,那么Spring将会抛出一个异常。为了避免异常的出现,可以将@Autowiredrequired属性设置为false
  • 在声明bean时,可以为其中一个可选的bean添加@Primary注解来标记其为首选,从而避免自动装配时多个bean可以选的歧义性。

Spring学习日志之Bean的装配的更多相关文章

  1. Spring学习记录(三)---bean自动装配autowire

    Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...

  2. Spring学习--xml 中 Bean 的自动装配

    Spring IOC 容器可以自动装配 Bean. 只要在 <bean> 的 autowire 属性里指定自动装配的模式. byName(根据名称自动装配):必须将目标 Bean 的名称和 ...

  3. Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件

    1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...

  4. Spring学习笔记--注入Bean属性

    这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...

  5. Spring学习(三)—— 自动装配案例分析

    Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,construct ...

  6. Spring MVC系列-(2) Bean的装配

    2. Bean的装配 Spring容器负责创建应用程序中的bean,并通过DI来协调对象之间的关系.Spring提供了三种主要的装配机制: XML显式配置: Java配置类进行显式配置: 隐式的bea ...

  7. Spring学习笔记(3)——Bean的注入方式

    依赖注入 依赖注入支持属性注入.构造函数注入.工厂注入. 属性注入: 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象 属性注入要求Bean提供一个默认的构造函数(无参构造函数),并为 ...

  8. spring学习(03)之bean实例化的三种方式

    bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...

  9. Spring学习之旅(四)--高级装配Bean

    条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void ...

随机推荐

  1. JSP入门 导出文件

    1.图片校验码 <img  src="captcha.jpg"  /> web.xml配置 <servlet>      <servlet-name& ...

  2. centos 6.5系统下安装ibus及设置开机自启动

    先说一下系统环境:centos 6.5,然后我是以root身份执行的,没有权限的用户参见sudo用法 第1步:查找并安装ibus安装包,命令如下: 找到一行: ibus-pinyin.x86_64 : ...

  3. CodeForces 242E二维线段树

                                                                                           E. XOR on Seg ...

  4. 读Zepto源码之fx_methods模块

    fx 模块提供了 animate 动画方法,fx_methods 利用 animate 方法,提供一些常用的动画方法.所以 fx_methods 模块依赖于 fx 模块,在引入 fx_methods ...

  5. ubuntu系统如何屏幕截图

    我们知道,windows下有很多截图的软件和插件,那么在ubuntu系统下我们该怎样截图呢? 下面就让小编来告诉你几种简单的方法吧. 工具/原料 ubuntu系统电脑 方法一: 1.也许很多朋友都知道 ...

  6. GBK和UTF8有什么区别

    GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符. UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多 ...

  7. iOS10新特性之SiriKit

    在6月14日凌晨的WWDC2016大会上,苹果提出iOS10是一次里程碑并且推出了十个新特性,大部分的特性是基于iPhone自身的原生应用的更新,具体的特性笔者不在这里再次叙述,请看客们移步WWDC2 ...

  8. 我的第一个python web开发框架(9)——目录与配置说明

    和老大聊完后,小白回家接收到相关工具函数包后,就按要求开始干活,首先要做的是熟悉配置参数和了解工具函数有哪些实用的工具. 由于这个项目比较简单,所以不用创建那么多分类,只需要api.common.co ...

  9. 【广告】win10 uwp 水印图床 含代码

    本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...

  10. IIC协议简介(笔记图片)