热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java之Spring注解配置bean实例代码解析

这篇文章主要介绍了Java之Spring注解配置bean实例代码解析,具有一定参考价值,文中还有有关Spring学习的资料下载链接及相关内容推荐,需要的朋友可以了解下。

前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的。故而,请使用注解配置bean !!!

【1】注解类别

@Component : 基本注解, 标识了一个受 Spring(点击这里可以下载《Spring应用开发完全手册》) 管理的组件

@Repository : 标识持久层组件

@Service : 标识服务层(业务层)组件

@Controller : 标识表现层组件

Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件。

对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称

【2】context:component-scan

当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件中声明 :base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类。

当需要扫描多个包时, 可以使用逗号分隔,如果仅希望扫描特定的类而非基包下的所有类,可使用 resource-pattern 属性过滤特定的类。示例:


 子节点表示要包含的目标类
 子节点表示要排除在外的目标类
 下可以拥有若干个  子节点

一个复杂的

如下配置将只扫描repository下的包:resource-pattern="repository/*.class"
默认fileter(use-default-filters="true")将扫描所有注解组件,若想使用 include-filter等,则将其改为false.
 
  

  

  

  

 

【3】代码中引用其他bean,简单示例如下:

 @Resource(name="userRepository")
 private UserRepository repository;
 public void add(){
  System.out.println("UserService add...");
  repository.save();
 }

引用其他bean有如下几种方式:

@Autowired 和 @Resource 、@Inject

【4】使用 @Autowired 自动装配 Bean

@Autowired 注解自动装配具有兼容类型的单个 Bean属性,构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解

默认按类型匹配,若一个类型多个实现,将会自动查询注解定义的名字,先匹配。若实现类注解都没有定义名字,将会抛出异常!!

1)默认情况下, 所有使用 @Authwired 注解的属性都需要被设置。

当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false。

2)默认情况下, 当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作。此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter 已指定注入 Bean 的名称。

3)@Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配。

4)@Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean。

5)@Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值。

【5】使用 @Resource 自动装配 Bean

@Resource 注解要求提供一个 Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称
我是最喜欢使用这个注解的,写上字段值@Resource(value="userService"),简单方便又省心。不用担心一个类型多个实现,而且不用额外加@Qualifier 去进行精确匹配。

【6】注解获取bean,并使用方法,如:

@Repository(value="bookShopDAO")
public class BookShopDAOImpl implements BookShopDAO {
}

类型为实现类型

 @Resource(name="bookShopDAO")
 BookShopDAOImpl bookShopDAO;

将可以使用 BookShopDAOImpl 的所有方法 !!

类型为接口类型

 @Resource(name="bookShopDAO")
 BookShopDAO bookShopDAO;
 //此时用到了多态

将只能使用 BookShopDAO中定义 的所有方法 !!,不能使用实现类自定义的方法

总结

本文关于Spring注解配置bean实例代码解析的内容就到这里了,希望对大家有所帮助。有兴趣的朋友可以参阅:Javabean和map相互转化方法代码示例,java中javaBean与Bean的深入理解,javaBean的基础知识及常见乱码解决方法等。感谢大家对的支持!


推荐阅读
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
author-avatar
YU亚菲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有