Spring:自动装配 Bean 的两种方式、使用注解开发

news2024/11/25 18:53:21

文章目录

  • Spring:Day 02
  • 一、自动装配 Bean
    • 1. 搭建环境
    • 2. 自动装配方式一:xml 配置
    • 3. 自动装配方式二:注解
  • 二、注解开发
  • 三、使用 JavaConfig 实现配置 Spring

Spring:Day 02

一、自动装配 Bean

在 Spring 中有三种装配的方式:

  1. 在 xml 中显示地配置(之前学的);
  2. 在 java 中显示地配置;
  3. 隐式地自动装配(这里介绍的)。

注意:前两种为手动装配,第三种为自动装配

Spring 会在上下文中自动寻找,并自动给 Bean 装配属性(给属性赋值)。

1. 搭建环境

建立一个 People 类,属性为两个自定义的对象 DogCat

public class People {

    private String name;
    private Dog dog;
    private Cat cat;
    
    //get、set、toString 方法
}

2. 自动装配方式一:xml 配置

在 xml 中配置自动装配的标签autowire ;有两种方法byNamebyType

  • byName:会自动在容器上下文中查找:和自己对象的 set 方法后的值对应的 bean id
  • byType:会自动在容器上下文中查找:和自己对象的属性类型相同的 bean

注意

  1. 使用 byName 时,自己对象的 set 方法后的值(首字母大写)必须与对应的 bean id 的值(首字母小写)相同;
  2. 使用 byType 时,必须保证类型在整个配置文件中是唯一的。

3. 自动装配方式二:注解

使用注解的前提:导入约束、配置注解的支持。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

注解直接在属性上使用即可,自动装配的注解有两种:

  • @Autowired@Qualifier :先通过 byType 的方式查找,当匹配到多个同类型时,再通过 byName 的方式,其中可以用 @Qualifier 指定名字,如果不指定,则匹配默认的名字;
  • @Resource
    • 没有 name 参数时:先通过 byName 的方式查找,当没有匹配到名字或匹配到多个相同的名字时,再通过 byType 的方式查找,如果没有匹配到对应的类型或有多个相同的类型,报错;
    • 有 name 参数时:选择指定的名字。


二、注解开发

使用注解开发的前提

  1. 保证导入了 aop 的依赖;
  2. 在配置文件的头文件中导入了 context 约束。

使用到的注解有:

注解说明
@Component组件,放在实体类(在 pojo 包中)上,作用为将类注册到 Spring 容器中,装配为 bean
@Repository作用同上,放在 dao 包中的类上
@Service作用同上,放在 service 包中的类上
@Controller作用同上,放在 controller 包中的类上
@Value(“值”)放在属性上,给属性赋值
@Autowired、@Qualifier(“值”)自动装配注解,见 一、3
@Resource(name = “值”)自动装配注解,见 一、3
@Scope(value = “作用域”)作用域,value 的值为作用域,如:singleton、prototype 等

注意:使用注解时一定要在 applicationContext.xml 配置文件中:

  • 配置注解的支持<context:annotation-config/>
  • 指定要扫描的包,这个包下的注解就会生效:<context:component-scan base-package="com.Sun3285"/>


三、使用 JavaConfig 实现配置 Spring

使用 JavaConfig 实现配置 Spring,完全代替applicationContext.xml 的 xml 配置。

实现方法:创建一个配置类,在类上加注解 @Configuration 即可,该配置类则相当于之前的 xml 配置文件。

此时注册 bean 有两种方式

  • 方式一:在实体类上使用 @Component 注解,然后在配置类上加 @ComponentScan("包") 注解,用来指定要扫描的包,使这个包下的注解生效,此时注册的 bean 的 id 为实体类类名首字母小写,class 为实体类的类型
  • 方式二:在配置类中通过定义方法创建对象,并在方法上加 @Bean 注解,此时注册的 bean 的 id 为方法名,class 为返回值的类型

测试时,将之前的读取 xml 配置文件替换为读取配置类:new AnnotationConfigApplicationContext(MyConfig.class)

补充知识:如果要把多个配置类中的配置导入到一个配置类中,只需要在配置类上加 @Import(其余配置类.class) 注解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL表用户列最大个数

PostgreSQL表用户列最大个数 有些业务可能有这么个需求&#xff1a;需要增加用户列&#xff0c;即通过ALTER TABLE ... ADD...来添加用户列。那么PG/GP中是否会有列个数的限制呢&#xff1f; 它有1600列数的限制&#xff0c;并且没有方法去除掉这个限制。参见&#xff1a; http…

千年平阴玫瑰,绽放数字新魅力

“人间美景五月天、玫瑰花放霞流丹。” 每年的五月&#xff0c;济南市平阴县总是一幅玫瑰花芳香如海的迷人景象。作为中国玫瑰之乡&#xff0c;平阴地处古东原之阴&#xff0c;位于北纬36度“玫瑰种植黄金带”之上&#xff0c;这里土肥地沃、气候温和&#xff0c;属暖温带大陆…

Netty实战(四)

本节我们看看Netty的传输&#xff08;全是干货&#xff0c;自带水杯&#xff09; 一、Java的NIO和OIO1.1 OIO1.2 NIO 二、Netty的NIO和OIO2.1 OIO2.2 NIO 三、传输API四、内置的传输4.1 NIO4.2 Epoll—用于 Linux 的本地非阻塞传输4.3 OIO4.4 用于 JVM 内部通信的 Local 传输4.…

chatgpt赋能Python-pycharm如何关联python

PyCharm如何关联Python 作为一款被广泛使用的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;PyCharm为Python程序员提供了丰富的开发工具和功能。在开始使用PyCharm之前&#xff0c;我们需要确保PyCharm已经正确地关联了Python。在本篇文章中&#xff0c;我们将介…

chatgpt赋能Python-pycharm访问网页

PyCharm访问网页的SEO技巧 PyCharm是一款强大且广受欢迎的Python开发环境&#xff0c;它提供了许多优秀的工具和功能&#xff0c;以便于Python项目的开发和管理。其中一个强大的功能是PyCharm可以访问网页&#xff0c;可以使你快速获取和分析数据。但是&#xff0c;在使用这个…

POSTGRESQL 通过TRIGGER 解决数据库表丢失数据的问题

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Consul系列:什么是Consul?

引言 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案&#xff0c; consu1 的方案更“一站式”&#xff0c;内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心…

多区域综合能源系统热网建模及系统运行优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

(转载)从0开始学matlab(第4天)—子数组

你可以选择和使用一个 MATLAB 函数的子集&#xff0c;好像他们是独立的数组一样。在数组名后面加括号&#xff0c;括号里面是所有要选择的元素的下标&#xff0c;这样就能选择这个函数的子集了。例如&#xff0c;假设定义了一个数组 arr1 如下 arr1[1.1 -2.2 3.3 -4.4 5.5] 那…

EMI超标问题排查

基于场外EMC测试反馈,EMI测试超标,测试结果如下图; 通过图形我们 可以看出,主要EMI超标频率集中在1GHz(大约700M的时候最差)附近。 使用RS频谱仪结合近场探头,进行复测: 复测情况确实存在EMI问题集中在700MHz左右。 去掉时钟输出接口时; 效果明显 通过试验,可以得出…

Java进阶-文件操作

1.File类 1.1File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具…

6.Redis事务

6.Redis事务 是什么&#xff1a;Redis事务VS数据库事务怎么玩Errors inside a transactionWatch监控&#xff1a;Optimistic locking using check-and-set 是什么&#xff1a; Redis Transactions allow the execution of a group of commands in a single step, they are cen…

系列二、Vue脚手架的基本语法

一、基于3.x版本脚手架创建vue项目的方式 1.1、基于交互式命令行的方式&#xff0c;创建vue项目 vue create project-name 1.2、基于图形化界面的方式&#xff0c;创建vue项目 vue ui 1.2.1、创建新项目 -详情 1.2.2、创建新项目-预设 1.2.3、创建新项目-功能 1.2.4、创建新…

千万不要告诉别人自己的绩效!某面试官觉得求职者表现不错,找熟人打听他离职原因,听说因为绩效低被劝退,决定不要他了!...

自己的绩效可以告诉别人吗&#xff1f; 一位网友提示&#xff1a; 告诉别人自己的绩效很恐怖&#xff01;在电梯里听到面试官说某求职者表现还不错&#xff0c;找熟人问了一下他上家公司的离职原因&#xff0c;听说是因为绩效低被劝退&#xff0c;所以不准备要他了。 网友说&am…

要不要和我们一起看看音视频技术未来的模样?

▲扫描图中二维码或点击“阅读原文” ▲ 直通LiveVideoStackCon 2023上海站九折优惠 2023年5月11日&#xff0c;Google I/O年度开发者大会完美落幕。随着PaLM2模型发布、Bard的自由访问&#xff0c;技术彻底迎来了“AI 时代”。 但今天我们想聊的并不是AI&#xff0c;而是一直支…

运用多输入模型优化不同维度特征

运用多输入模型优化不同维度特征 背景介绍 使用神经网络模型做用户付费金额预测&#xff0c;一种常见的特征工程场景&#xff0c;是把某个特定付费区间&#xff0c;比如付费金额大于10小于等于12的付费用户信息处理成特征&#xff0c;既可以将这部分用户的付费人数作为特征&a…

自助迁移工具升级!如何从 Confluence 切换至 ONES Wiki?

近日&#xff0c;ONES 升级了 Confluence 自助迁移工具&#xff0c;对迁移数据类型、迁移范围、迁移模式等多个维度的能力进行了提升&#xff0c;帮助企业更高效率、更低成本地将 Confluence 中的数据完整、准确地迁移至 ONES Wiki 中。 在 Confluence 与 ONES 服务资源充足的前…

国民游戏王者荣耀的真实地图开发之路

&#x1f449;腾小云导读 相信很多人都玩过王者荣耀&#xff0c;大家在欣赏其华丽的游戏界面以及炫酷的游戏技能时&#xff0c;是否好奇过王者荣耀的地图是怎样开发出来的&#xff1f;在开发的历程中&#xff0c;都有哪些问题&#xff1f;是怎样解决的&#xff1f;本文将从其地…

飞桨+文心一言的“动力装置”,藏着百度财报的增长密码

我们习以为常的科技世界&#xff0c;正在以肉眼可见的速度被大模型所改变甚至重构。不想错失机遇的科技企业&#xff0c;都怀揣着造AI重器的梦想&#xff0c;各种大模型纷至沓来。 发布大模型只是开始&#xff0c;如同火箭发射&#xff0c;升空是第一步&#xff0c;后续能否顺利…

【运维知识进阶篇】集群架构-Nginx反向代理详解

在互联网请求中&#xff0c;客户端通常无法直接向服务端发起请求&#xff0c;就需要用代理服务&#xff0c;来实现客户端和的交互&#xff0c;起到一个中介的作用。 Nginx代理服务常见模式 Nginx代理按照应用场景模式可以分为正向代理和反向代理。 正向代理是内部上网过程中&a…