前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-Spring(通过注解配置bean)

快速学习-Spring(通过注解配置bean)

作者头像
cwl_java
发布2020-02-12 12:52:21
5130
发布2020-02-12 12:52:21
举报
文章被收录于专栏:cwl_Javacwl_Java

IOC容器和Bean的配置

2.11 通过注解配置bean

2.11.1 概述

相对于XML方式而言,通过注解的方式配置bean更加简洁和优雅,而且和MVC组件化开发的理念十分契合,是开发中常用的使用方式。

2.11.2 使用注解标识组件

  1. 普通组件:@Component 标识一个受Spring IOC容器管理的组件
  2. 持久化层组件:@Repository 标识一个受Spring IOC容器管理的持久化层组件
  3. 业务逻辑层组件:@Service 标识一个受Spring IOC容器管理的业务逻辑层组件
  4. 表述层控制器组件:@Controller 标识一个受Spring IOC容器管理的表述层控制器组件
  5. 组件命名规则 ① 默认情况:使用组件的简单类名首字母小写后得到的字符串作为bean的id ② 使用组件注解的value属性指定bean的id 注意:事实上Spring并没有能力识别一个组件到底是不是它所标记的类型,即使将@Respository注解用在一个表述层控制器组件上面也不会产生任何错误,所以 @Respository、@Service、@Controller这几个注解仅仅是为了让开发人员自己明确当前的组件扮演的角色。

2.11.3 扫描组件

组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。

  1. 指定被扫描的package
代码语言:javascript
复制
<context:component-scan base-package="com.atguigu.component"/>
  1. 详细说明 ① base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类。 ② 当需要扫描多个包时可以使用逗号分隔。 ③ 如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,示例:
代码语言:javascript
复制
<context:component-scan 
	base-package="com.atguigu.component" 
	resource-pattern="autowire/*.class"/>

④ 包含与排除 ● <context:include-filter>子节点表示要包含的目标类 注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false, 禁用默认过滤器,然后扫描的就只是include-filter中的规则指定的组件了。<context:exclude-filter>子节点表示要排除在外的目标类 ● component-scan下可以拥有若干个include-filter和exclude-filter子节点 ● 过滤表达式

在这里插入图片描述
在这里插入图片描述

3) JAR包 必须在原有JAR包组合的基础上再导入一个:spring-aop-4.0.0.RELEASE.jar

2.11.4 组件装配

  1. 需求 Controller组件中往往需要用到Service组件的实例,Service组件中往往需要用到 Repository组件的实例。Spring可以通过注解的方式帮我们实现属性的装配。
  2. 实现依据 在指定要扫描的包时,<context:component-scan> 元素会自动注册一个bean的后置处 理器:AutowiredAnnotationBeanPostProcessor的实例。该后置处理器可以 自动装配标记 了@Autowired@Resource@Inject注解的属性。
  3. @Autowired注解 ① 根据类型实现自动装配。 ② 构造器、普通字段(即使是非public)、一切具有参数的方法都可以应用@Autowired 注解 ③ 默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹 配的bean装配属性时,会抛出异常。 ④ 若某一属性允许不被设置,可以设置@Autowired注解的required属性为 false ⑤ 默认情况下,当IOC容器里存在多个类型兼容的bean时,Spring会尝试匹配bean 的id值是否与变量名相同,如果相同则进行装配。如果bean的id值不相同,通过类型的自动装配将无法工作。此时可以在@Qualifier注解里提供bean的名称。Spring 甚至允许在方法的形参上标注@Qualifiter注解以指定注入bean的名称。 ⑥ @Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的bean进行自动装配。 ⑦ @Autowired注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的bean。 ⑧ @Autowired注解用在java.util.Map上时,若该Map的键值为String,那么 Spring将自动装配与值类型兼容的bean作为值,并以bean的id值作为键。
  4. @Resource @Resource注解要求提供一个bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为bean的名称。
  5. @Inject @Inject和@Autowired注解一样也是按类型注入匹配的bean,但没有reqired属性。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IOC容器和Bean的配置
    • 2.11 通过注解配置bean
      • 2.11.1 概述
      • 2.11.2 使用注解标识组件
      • 2.11.3 扫描组件
      • 2.11.4 组件装配
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档