Spring的自动装配

自动装配就是指 Spring 容器在不使用 <constructor-arg> 和<property> 标签的情况下,可以自动装配(autowire)相互协作的 Bean 之间的关联关系,将一个 Bean 注入其他 Bean 的 Property 中。

使用自动装配需要配置 <bean> 元素的 autowire 属性。autowire 属性有五个值,具体说明如下表所示:

名称 说明
no 默认值,表示不使用自动装配,Bean 依赖必须通过 ref 元素定义。
byName 根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 name 相同,则自动装配这个 Bean 到 Property 中。(表示按属性名称自动装配,XML 文件中 Bean 的 id 必须与类中的属性名称相同)
byType 根据 Property 的数据类型(Type)自动装配,如果一个 Bean 的数据类型兼容另一个 Bean 中 Property 的数据类型,则自动装配。(XML 文件中 Bean 的 id 与类中的属性名称可以不同,但必须只有一个类型的 Bean。)
constructor 类似于 byType,根据构造方法参数的数据类型,进行 byType 模式的自动装配。(类中构造函数的参数必须在配置文件中有相同的类型)
autodetect(3.0版本不支持) 如果 Bean 中有默认的构造方法,则用 constructor 模式,否则用 byType 模式。

自动装配的优缺点

优点

  • 自动装配只需要较少的代码就可以实现依赖注入。

缺点

  • 不能自动装配简单数据类型,比如 int、boolean、String 等。

  • 相比较显示装配,自动装配不受程序员控制。

Spring基于注解装配Bean(常用注解)

Spring 默认不使用注解装配 Bean,因此需要在配置文件中添加<context:annotation-config/>,启用注解。或者在被子文件中配置

 <context:component-scan base-package="需要使用注解的包"></context:component-scan>

常用注解注入值:

@Component:用来描述Spring中的Bean,仅仅表示一个组件(Bean),并且可以作用在任何层次,使用时只需要将该注解标注在相应类上即可。

@Controller:通常作用在控制层(如 Struts2 的 Action、SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

@Service:通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

@Repository:用于将数据访问层(DAO层)的类标识为Spring中的Bean,其功能与@Component相同

@Autowired:可以应用到 Bean 的属性变量、属性的 setter 方法、非 setter 方法及构造函数等,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功,如果ioc容器中没有任何bean类型和要注入的变量类型匹配则报错

@Qualifier:与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。它在给类成员注入时不能单独使用必须要和@Autowired,但是在给方法参数注入时可以单独使用。

@Resource:作用于@Autowired相同,区别在于@Resource可以通过Bean实例名称进行装配,也就是@Resource中的两个重要属性name和type。

@Value:用于注入基本类型和String类型的值用于指定数据的值,它可以使用spring中SpEL;

@ConfigurationProperties:用于注入一些值。请注意以下几点:

  • 前缀定义了哪些外部属性将绑定到类的字段上

  • 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配

  • 我们可以简单地用一个值初始化一个字段来定义一个默认值

  • 类本身可以是包私有的

  • 类的字段必须有公共 setter 方法

@Value和@ConfigurationProperties区别

二者区别 @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

@Configuration:标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的<beans>,在使用该注解的类中,使用@Bean注解标注的方法,返回的类型都会直接注册为bean。其底层实现使用了@Component 。

@Bean:用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。

改变作用域的常用注解:

@Lazy(true):表明一个bean 是否延迟加载,可以作用在方法上,表示这个方法被延迟加载;可以作用在@Component (或者由@Component 作为原注解) 注释的类上,表明这个类中所有的bean 都被延迟加载。如果没有@Lazy注释,或者@Lazy 被设置为false,那么该bean 就会急切渴望被加载;除了上面两种作用域,@Lazy 还可以作用在@Autowired和@Inject注释的属性上,在这种情况下,它将为该字段创建一个惰性代理,作为使用ObjectFactory或Provider的默认方法

@Scope:用来给Bean改变作用域,使用时直接在Bean上加@Scope(value = "xxx"),默认值为singleton。

和生命周期相关常用注解:

@PostConstruct:该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

@PreDestory:@PreDestory修饰的方法会在服务器卸载Servlet的时候运行,并且之后被服务器调用一次,类似于Servlet中的destory()方法,虽然PreDestory字面意思是在destory之前运行,但是被@PreDestory修饰的方法会在destory方法运行之后运行,在Servlet被彻底卸载之前,PreDestory里的Destory指的是Servlet的销毁,而不是destory()方法。

Spring——自动装配相关推荐

  1. Spring 自动装配 ‘byType’

    转载自   Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...

  2. Spring 自动装配 ‘byName’

    转载自  Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...

  3. spring自动装配依赖包_解决Spring自动装配中的循环依赖

    spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...

  4. Java的注解机制——Spring自动装配的实现原理

    JDK1.5加入了对注解机制的支持,实际上我学习Java的时候就已经使用JDK1.6了,而且除了@Override和@SuppressWarnings(后者还是IDE给生成的--)之外没接触过其他的. ...

  5. Spring自动装配----注解装配----Spring自带的@Autowired注解

    Spring自动装配----注解装配----Spring自带的@Autowired注解 父类 package cn.ychx;public interface Person {public void ...

  6. spring自动装配、注解

    spring自动装配 Spring 自动装配 byName 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 ...

  7. Spring自动装配(autowire)篇

    什么是自动装配 自动装配帮我们省去了 property标签配置操作,Spring会自动根据 属性名称,类型,构造器来进行自动注入. 例如不进行自动装配配置如下: <bean id="u ...

  8. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  9. 第六篇 Spring 自动装配

    <Spring>篇章整体栏目 ----------------------------- [第一章]spring 概念与体系结构 [第二章]spring IoC 的工作原理 [第三章]sp ...

  10. (二)Spring自动装配

    Spring自动装配 为了减少XML的配置数量.Spring提供了几种技巧来解决这一问题: 自动装配(autowiring): 有助于减少<property>元素和<constroc ...

最新文章

  1. 增强CNN学习能力的Backbone:CSPNet
  2. Spring Boot WebFlux 全局异常处理(404,500)解决IllegalArgumentException: Property 'message...
  3. P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  4. Window CE 6.0流驱动开发动态加载实验
  5. 笔记-网页内嵌Google地图与地理位置模拟
  6. SATA硬盘检测修复及MHDD的一些使用详解
  7. Android开源项目推荐之「图片加载到底哪家强」
  8. xctf攻防世界 MISC高手进阶区 flag_universe
  9. C#中的bin和obj文件夹有什么用?
  10. Kafka安全认证 SASL/PLAINTEXT,账号密码认证
  11. Windows10只关闭显卡驱动更新
  12. 我灰是啥意思是什么_色彩老师说我的静物脏乱花灰是啥意思?
  13. 步进电机控制Proteus仿真
  14. 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
  15. 关于升级 win10 后打不开网页的小问题!
  16. 集成电路工艺专题复习(续)
  17. menuconfig的执行过程
  18. TLE7259-3GE 车用LIN收发器
  19. 回文联对联大全_对联大全回文联
  20. 比亚迪DM-i双模驱动模式概述

热门文章

  1. Krypital Group(金氪资本)宣布完成对Ambrus Studio的战略投资
  2. 2021年终总结:鲜花怒马少年时,一日看尽长安花
  3. 【五线谱】重音记号、渐强记号、渐弱记号
  4. 概率论与数理统计学习笔记(5)——极大似然估计
  5. ucml 连接虚字段
  6. 算法系列:基于 FPGA 的图像边缘检测系统设计(sobel算法)
  7. (转帖)微服务拆分的原则和方法(2)
  8. 【selenium】126官网邮箱登录
  9. cupsd进程_CUPS 简介
  10. 【转】京东商城思维导图