Spring bean 装配
装配 bean
1. 自动化装配
@Component
告知Spring为被注解的类创建bean
> 为bean命名: > + Spring为Bean默认命名为类名首字母小写 > + @Component("XXX") > + @Named("XXX")
@ComponentScan
组件扫描默认不可用,需用此注解显式配置
设置组件扫描基础包:
- 默认以配置类(带@Configuration)所在的包为基础包
@ComponentScan({"XXX", "XXX2"})/@ComponentScan(basePackages = {"XXX", "XXX2"})
指定基础包,使用String作为value值,类型不安全@ComponentScan(basePackageClasses = {XXX.class, XXX2.class})
使用类来作为value值,这些类所在的包
将作为基础包;注: 也可以在包中创建仅用于扫描的
空标记接口
,使用其作为value值;
@Autowire
自动装配,将已创建的bean自动注入到当前类中,可用于:
- 构造器
@Autowiredpublic CDPlayer(CopactDisc cd){this.cd = cd;}
复制代码
> + 属性的Setter方法
复制代码
@Autowiredpublic void setCompactDisc(CopactDisc cd){this.cd = cd;}
复制代码
> + 类的任何方法上
复制代码
@Autowiredpublic void insertDisc(CompactDisc cd){this.cd = cd;}
复制代码
自动装配结果:
- 有且只有一个bean匹配依赖需求,将其装配进来
- 没有匹配的bean,创建应用上下文时,Spring抛出异常;若要避免,将@Autowired的
required
属性设置为false,此时,要装配的bean为null,需要代码进行null检查- 多个匹配的bean,Spring抛出异常
@Named 和 @Inject
@Inject注解来源于java依赖注入规范,大部分情况下可与@Autowired互换
2. 通过代码装配Bean
若想将第三方库中的组件装配到应用中,无法添加自动扫描和装配的注解,此时,需要采用显式装配的方式。
XML
javaConfig
更强大、类型安全、对重构友好
- 不应该包含任何业务逻辑
- 不应该侵入到任何业务逻辑代码中(不和其他类发生关联)
- 通常放到单独的包中
创建一个配置类
import org.springframework.context.annotation.Configuration@Configuration//表明这个类是配置类
public class TestConfig {
}
复制代码
@Bean
声明一个简单bean
此注解告诉Spring:
- 被其标记的方法返回的对象,要注册为Spring上下文中的bean; 方法体中包含最终产生bean实例的逻辑.
@Bean
public BeanObject createBean(){return new BeanObject();
}
复制代码
- Bean的id默认和被注解的方法名一样,支持重命名,使用Bean注解的
name
属性
Bean注入
- 方式1: 引用创建Bean的方法 eg: 若要在BeanObject2中注入BeanObject1,如下
@Bean
public BeanObject2 inject(){return new BeanObject2(createBean());
}@Bean
public BeanObject2 inject2(){return new BeanObject2(createBean());
}
复制代码
Spring会拦截所有对createBean()方法的调用,并确保直接返回该方法所创建的bean; Spring默认是单例的,上述代码中,两个BeanObject2的bean中注入的是同一个BeanObject1的bean
- 方式2: 请求一个实现类bean的接口类型作为参数
/**假设BeanObject是接口BeanObject1Interface的实现类
**/
@Bean
public BeanObject2 inject(BeanObject1Interface object1){return new BeanObject2(object1);
}
复制代码
这是引用其他bean的最佳选择,不要求将BeanObject1Interface声明到同一个配置类中,甚至没要求其必须在javaConfig中声明,可以通过组件扫描或xml进行配置。不管接口是采用什么方式创建出来的,Spring都会将其传入到配置方法中,用来创建BeanObject2 bean。
另外,除了构造器,我们还可以使用任何java功能来产生bean实例,比如setter方法等。
3. XML装配
Spring Tool Suite: spring.io/tools 此工具有Eclipse、Visual Studio Code、Atom支持,可帮助我们编写xml配置文件
- 对强依赖使用构造器注入;对选择性的依赖使用属性注入。
Spring bean 装配相关推荐
- Spring Bean装配(上)
Bean:在spring的IOC里面,把配置到IOC容器里面的实体或者是对象都称为Bean Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources&Res ...
- Spring Bean 装配和依赖注入
Spring IOC 容器的依赖注入工作可以分为两个阶段.第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通 ...
- spring Bean装配的几种方式简单介绍
Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...
- Spring Bean装配
Spring注入 Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为 常用的两种注入方式: 设值注入 构造注入 Bean配置项及作用域 Bean的配置项 Id Cl ...
- 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-7
基于泛型自动装配: package com.imooc.beanannotation.javabased;import org.springframework.beans.factory.annota ...
- 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-2
数组及Map的自动注入: 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把 ...
- 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-6
默认@Bean是单例的,使用@Scope指定它的范围: package com.imooc.beanannotation.javabased;//import org.springframework. ...
- 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-5
使用@ImportResource和@Value注解进行资源文件读取 package com.imooc.beanannotation.javabased;import org.springframe ...
- 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-3
@Qualifier @Qualifier可缩小注解范围,也可指定唯一的bean. package com.imooc.beanannotation.multibean;import java.uti ...
最新文章
- 电子班牌系统服务器,电子班牌管理系统
- Python: adb自动化ce'shi
- 在@NamedQueries中枚举@NamedQuery
- 工作57:element格式化内容
- 安全验证框架使用笔记002---Shiro实现基本的身份验证
- keras版Mask-RCNN来训练自己的目标检测数据集
- 失物招领小程序_在机场丢了东西怎么办?温州机场失物招领在线办理平台暖心上线!...
- python 读取sheet_python实现读取excel文件中所有sheet操作示例
- network 网站备案
- 实践:加快gradle的构建速度
- 未转变者怎么调服务器难度,未转变者服务器怎么设置出生点 | 手游网游页游攻略大全...
- CSI笔记【3】:多进多出/MIMO技术
- CorelDraw插件开发-文字功能-文本分列-创建文本-函数分析-Cdr插件开发教程(二)
- Pyhton3 下载Telegram 频道数据
- python 如何调试uc浏览器_如何使用 UC浏览器开发者版 进行移动端调试
- 辨别亦真亦假的Svchost.exe
- JAVA基础常见的知识点
- 腾讯云域名购买注意事项(申请注册必看)
- Windows7下注册表修改右键新建快捷键
- Python音频转成numpy数组:numpy.frombuffer报错ValueError: buffer size must be a multiple of element size
热门文章
- hdu 1301 Jungle Roads 最小生成树
- 使用WebClient 获得网页内容或提交请求
- Origin绘制大小和颜色可变的3D散点图
- Vs code自动生成Doxygen格式注释
- php 跨域读php_php跨域的几种方式
- C语言 | 基于STM32的MPU6050模块程序(主程序)
- 计算机视觉与深度学习 | 双目视觉SLAM之ORB-SLAM2的Matlab实现(完整代码)
- matlab ask函数,matlab函数大全(非常实用)
- c语言解析xml字符串_Python XML解析和处理(三十二)
- Win32字符串处理函数