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

  1. Spring Bean装配(上)

    Bean:在spring的IOC里面,把配置到IOC容器里面的实体或者是对象都称为Bean Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources&Res ...

  2. Spring Bean 装配和依赖注入

    Spring IOC 容器的依赖注入工作可以分为两个阶段.第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通 ...

  3. spring Bean装配的几种方式简单介绍

    Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...

  4. Spring Bean装配

    Spring注入 Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为 常用的两种注入方式: 设值注入 构造注入 Bean配置项及作用域 Bean的配置项 Id Cl ...

  5. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-7

    基于泛型自动装配: package com.imooc.beanannotation.javabased;import org.springframework.beans.factory.annota ...

  6. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-2

    数组及Map的自动注入: 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把 ...

  7. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-6

    默认@Bean是单例的,使用@Scope指定它的范围: package com.imooc.beanannotation.javabased;//import org.springframework. ...

  8. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-5

    使用@ImportResource和@Value注解进行资源文件读取 package com.imooc.beanannotation.javabased;import org.springframe ...

  9. 观看慕课moocer老师视频Spring Bean装配之Autowire注解说明-3

    @Qualifier @Qualifier可缩小注解范围,也可指定唯一的bean. package com.imooc.beanannotation.multibean;import java.uti ...

最新文章

  1. 电子班牌系统服务器,电子班牌管理系统
  2. Python: adb自动化ce'shi
  3. 在@NamedQueries中枚举@NamedQuery
  4. 工作57:element格式化内容
  5. 安全验证框架使用笔记002---Shiro实现基本的身份验证
  6. keras版Mask-RCNN来训练自己的目标检测数据集
  7. 失物招领小程序_在机场丢了东西怎么办?温州机场失物招领在线办理平台暖心上线!...
  8. python 读取sheet_python实现读取excel文件中所有sheet操作示例
  9. network 网站备案
  10. 实践:加快gradle的构建速度
  11. 未转变者怎么调服务器难度,未转变者服务器怎么设置出生点 | 手游网游页游攻略大全...
  12. CSI笔记【3】:多进多出/MIMO技术
  13. CorelDraw插件开发-文字功能-文本分列-创建文本-函数分析-Cdr插件开发教程(二)
  14. Pyhton3 下载Telegram 频道数据
  15. python 如何调试uc浏览器_如何使用 UC浏览器开发者版 进行移动端调试
  16. 辨别亦真亦假的Svchost.exe
  17. JAVA基础常见的知识点
  18. 腾讯云域名购买注意事项(申请注册必看)
  19. Windows7下注册表修改右键新建快捷键
  20. Python音频转成numpy数组:numpy.frombuffer报错ValueError: buffer size must be a multiple of element size

热门文章

  1. hdu 1301 Jungle Roads 最小生成树
  2. 使用WebClient 获得网页内容或提交请求
  3. Origin绘制大小和颜色可变的3D散点图
  4. Vs code自动生成Doxygen格式注释
  5. php 跨域读php_php跨域的几种方式
  6. C语言 | 基于STM32的MPU6050模块程序(主程序)
  7. 计算机视觉与深度学习 | 双目视觉SLAM之ORB-SLAM2的Matlab实现(完整代码)
  8. matlab ask函数,matlab函数大全(非常实用)
  9. c语言解析xml字符串_Python XML解析和处理(三十二)
  10. Win32字符串处理函数