Spring学习日志之Bean的装配
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将会抛出一个异常。为了避免异常的出现,可以将
@Autowired的required属性设置为false。 - 在声明bean时,可以为其中一个可选的bean添加
@Primary注解来标记其为首选,从而避免自动装配时多个bean可以选的歧义性。
Spring学习日志之Bean的装配的更多相关文章
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- Spring学习--xml 中 Bean 的自动装配
Spring IOC 容器可以自动装配 Bean. 只要在 <bean> 的 autowire 属性里指定自动装配的模式. byName(根据名称自动装配):必须将目标 Bean 的名称和 ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- Spring学习笔记--注入Bean属性
这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...
- Spring学习(三)—— 自动装配案例分析
Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,construct ...
- Spring MVC系列-(2) Bean的装配
2. Bean的装配 Spring容器负责创建应用程序中的bean,并通过DI来协调对象之间的关系.Spring提供了三种主要的装配机制: XML显式配置: Java配置类进行显式配置: 隐式的bea ...
- Spring学习笔记(3)——Bean的注入方式
依赖注入 依赖注入支持属性注入.构造函数注入.工厂注入. 属性注入: 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象 属性注入要求Bean提供一个默认的构造函数(无参构造函数),并为 ...
- spring学习(03)之bean实例化的三种方式
bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...
- Spring学习之旅(四)--高级装配Bean
条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void ...
随机推荐
- S2_OOP第三章
第一章 多态 概念 多态是具有表现多种型生态的能力的特征,同一个实现接口,使用不同的实例而执行不同的操作 子类转换父类(向上转型) 用父类接受子类,向上转型 向上转型的规则: 讲一个父类的引用志向一个 ...
- PHP CodeBase: 生成N个不重复的随机数
有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次.前面有个程序员捅了漏子,忘了把投票入库,有200个用户产生的投票序列为空.那么你会如何填补这个漏子? <?php /* ...
- vuejs2-生命周期
https://segmentfault.com/a/1190000008879966 1 声明周期图示 2 过渡
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- [Gitlab运维系列]Gitlab 403 forbidden 并发引起IP被封
问题 带着团队使用Git,使用的是自搭建的Gitlab.但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden. 原因 Gitlab使用rack_attack做了并发访问的限制. 解 ...
- WebService文件上传相关配置(404.13、超出限制、超时)
最近在做文件上传的功能,遇到一些问题,记录如下,以备以后使用. 1.HTTP Error 404.13 - Not Found,请求筛选模块被配置为拒绝超过请求内容长度的请求. IIS默认允许请求长度 ...
- jquery层次选择器:空格 > next + nextAll ~ siblings
全栈工程师开发手册 (作者:栾鹏) jquery系列教程1-选择器全解 jquery层次选择器 jquery层次选择器,包括空格.>.next.+.nextAll.~.siblings等函数或表 ...
- 【学习】滚动延迟加载插件scrollLoading用法
今天遇到一个很好用的滚动延迟加载的插件,作者是我的偶象大神张鑫旭,其博客为http://www.zhangxinxu.com/. 以前也写过这种效果,用的是lazyload,不过只能实现图片的加载.而 ...
- C# 相对路径转绝对路径
如果是路径相对路径,使用 Path 转换 System.IO.Path.Combine(文件夹, relativePath); 文件夹就是相对的文件夹. 这样就可以把相对路径转绝对. 参见:http: ...
- 浅谈前后端分离与实践 之 nodejs 中间层服务(二)
一.背景 书接上文,浅谈前后端分离与实践(一) 我们用mock服务器搭建起来了自己的前端数据模拟服务,前后端开发过程中只需定义好接口规范,便可以相互进行各自的开发任务.联调的时候,按照之前定义的开发规 ...