【Spring】注解

news2024/11/29 8:48:21

文章目录

  • 1. 前言
  • 2.注解开发的准备工作
  • 3. IOC相关注解
    • DI相关注解
  • 4. DI相关注解
    • 4.1 @Value
    • 4.2 @AutoWired
    • 4.3 @Qualifier
  • 5. xml配置文件相关注解
    • 5.1 @Configuration
    • 5.2 @ComponensScan
  • 6.@Bean注解
  • 7. @PropertySource

1. 前言

Spring支持使用注解代替xml配置,注解开发可以简化配置.
注解和XML配置文件的对比:

  • 注解相对于XML配置的优点主要体现在编写的简洁性和代码量的减少上。由于注解直接写在源代码中,使得代码看起来更直观和清晰。不过,这也是注解的一个缺点,即一旦需要在源代码中进行维护或修改,就必须改动源代码,并重新编译和部署。
  • 相比之下,XML配置有其独特的优势。首先,XML是集中式的元数据,不需要与代码绑定,这使得我们可以独立于源代码进行配置修改,而无需重新编译和部署。其次,使用XML可以进行灵活的配置调整,并且当需要对软件进行扩展时,利用XML可以方便地实现。此外,XML还具有较好的可读性和易懂性。

2.注解开发的准备工作

如果要使用注解开发必须要开始组件扫描,这样加了注解的类才能被扫描出来,Spring才能去解析其中的注解

如下:

<context:component-scan base-package="com.example"></context:component-scan>

这样Spring就能够扫描com.example包下所有的类

3. IOC相关注解

@Component @Controller @Service @Repository 这四个注解都可以加到类上

他们都可以起到类似bean标签的作用。可以把加了该注解类的对象放入Spring容器中.实际再使用时选择任意一个都可以。但是后3个注解是语义化注解。

示例:

在之前管理bean对象都是使用xml配置文件中bean标签来管理的,例如:

<bean class="com.example.entity.Student" id="student"></bean>

如今学习了注解,就可以使用注解来代替xml配置文件了

如下:

@Data
@AllArgsConstructor
@Component("student")
public class Student {
    private int age;
    private String name;
    public Student() {
        System.out.println("执行了空参构造方法");
    }
}

只需要添加一个注解,并加上标识就可以了. 同样可以获取到bean对象
在这里插入图片描述
⭐注意不要忘记加注解扫描以及确认路径是否正确

虽然说上面四个注解用法是相同的,但也不要随便用,就像变量名不能随便取一样:

  • 如果是Service类要求使用@Service。
  • 如果是Dao类要求使用@Repository
  • 如果是Controllerl类(SpringMVC中会学习到)要求使用@Controller
  • 如果是其他类可以使用@Component

DI相关注解

4. DI相关注解

DI依赖注入就是要让Spring来给Bean对象的属性进行赋值,可以使用注解来完成

4.1 @Value

主要用于String,int等可以直接赋值的属性注入。

示例1:

@Component("student")
public class Student {
    @Value("20")
    private int age;
    @Value("张三")
    private String name;
    public Student() {
        System.out.println("执行了空参构造方法");
    }
}

在这里插入图片描述
用法并不难,就不多说了

⭐注意:@Value注解并不需要setter方法,但支持SpEL表达式

示例2:

@Component("student")
public class Student {
    @Value("#{20+6}")
    private int age;
    @Value("张三")
    private String name;
    public Student() {
        System.out.println("执行了空参构造方法");
    }
}

在这里插入图片描述

4.2 @AutoWired

@Autowired用于自动装配bean。它可以应用于字段、setter方法和构造函数上。当一个类被Spring容器管理时,可以使用@Autowired注解来注入其他bean

@Value注入的都是一些简单类型的值,如果Student中有其它类的实例,要如何注入? 这时候就需要用到@AutoWired注解

示例:

@Component("student")
public class Student {
    @Value("#{20+6}")
    private int age;
    @Value("张三")
    private String name;
    @Autowired
    private StudentDao studentDao;
    public Student() {
        System.out.println("执行了空参构造方法");
    }
}

⭐需要注意的是:当一个类被Spring容器管理时,才可以使用@Autowired注解来注入其他bean

@Repository
public class StudentDao {
    @Value("111")
    private int num;
}

在这里插入图片描述

接下来介绍**@AutoWired中的属性**
在这里插入图片描述

默认值为true.

如果required属性值为false,那么即使要被注入的类没有被Spring容器管理,也不会报错

示例:

@Component("student")
public class Student {
    @Value("#{20+6}")
    private int age;
    @Value("张三")
    private String name;
    @Autowired(required = false)
    private StudentDao studentDao;
    public Student() {
        System.out.println("执行了空参构造方法");
    }
}
//@Repository
public class StudentDao {
    @Value("111")
    private int num;
}

在这里插入图片描述

4.3 @Qualifier

如果相同类型的bean在容器中有多个时,单独使用@AutoWired就不能满足要求,这时候可以再加上
@Qualifier来指定bean的名字从容器中获取bean注入。

⭐注意:@Qualifier是不能单独使用的

5. xml配置文件相关注解

上面的注解中,虽然可以使用注解替换掉bean,但是xml配置文件还在,接下来学习的注解就可以把xml配置文件替换掉

5.1 @Configuration

标注在类上,表示当前类是一个配置类。我们可以用注解类来完全替换掉xml配置文件。
⭐注意: 如果使用配置类替换了xml配置,spring容器要使用: AnnotationConfigApplicationContext

5.2 @ComponensScan

@ComponensScan 可以用来代替context:component-scan标签来配置组件扫描,@ComponensScan中的basePackages属性用于指定需要扫描的基础包路径。

示例:

@Configuration
@ComponentScan(basePackages = "com.example")
public class ApplicationConfig {
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component("student")
public class Student {
    @Value("#{20+6}")
    private int age;
    @Value("张三")
    private String name;
}

在这里插入图片描述

注意这里的Spring容器类型,以及创建实例时,传递的参数是配置类的字节码文件

6.@Bean注解

@Bean可以用来代替bean标签,主要用于第三方类的注入

例如之前的jdbc的数据源,像这种对象就不能使用注解进行配置,因为这些类的源码是在jar包里的.
在这里插入图片描述
这时就可以用@Bean注解

@Configuration
@ComponentScan(basePackages = "com.example")
public class ApplicationConfig {

    @Bean("dataSource")
    public DataSource getDataSource(){
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false;");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        return dataSource;
    }
}

此时就可以通过getBean方法传入dataSource来获取数据源对象
在这里插入图片描述

7. @PropertySource

可以用来代替context:property-placeholder,让Spring读取指定的properties文件。
然后可以使用@Value来获取读取到的值。

示例:

jdbc.properties文件:

jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false;
jdbc.user=root
jdbc.password=123123

配置类:

@Configuration
@ComponentScan(basePackages = "com.example")
@PropertySource("jdbc.properties")
public class ApplicationConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public DataSource getDataSource(){
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL(url);
        ((MysqlDataSource)dataSource).setUser(user);
        ((MysqlDataSource)dataSource).setPassword(password);
        return dataSource;
    }
}

在这里插入图片描述
由上述结果可以看出properties文件中的键值对已经成功被读取到了

⭐注意: 使用@Value来获取读取到的值时,使用的是${}

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

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

相关文章

如何备战秋季招聘:从规划到面试的全方位攻略

如何备战秋季招聘&#xff1a;从规划到面试的全方位攻略 随着秋天的到来&#xff0c;秋季招聘也进入了高峰期。对于即将毕业的同学们来说&#xff0c;抓住这个黄金时期&#xff0c;找到一份满意的工作至关重要。本文将为你提供一份全面的秋季招聘攻略&#xff0c;从规划到面试&…

<微信小程序>《微信小程序开发笔记》(二)

《微信小程序开发笔记》&#xff08;二&#xff09; 1 程序开发1.1 原则&#xff08;自己感悟&#xff09;1.2 架构1.3 开发模式 2 建立项目3 微信代码构成3.1 JSON 配置文件3.2 WXML 模板文件3.3 WXSS 样式文件3.4 JS 脚本逻辑文件 1 程序开发 1.1 原则&#xff08;自己感悟&…

吴翰清《计算》重磅来袭,为了可计算的价值,写给所有人!

《计算》终于出版了 计算&#xff0c;为了可计算的价值 撰文 | 吴翰清 三年前在新冠疫情大爆发期间&#xff0c;当我决心动笔写下第一行文字时&#xff0c;从来没想到过写作《计算》的工程会如此之大。 它横跨了人类文明三千年的数学史和计算机科学史&#xff0c;从数字的起…

【JMeter】定时器分类以及场景介绍

1. 定时器分类 固定定时器 作用&#xff1a;请求之间设置等待时间应用场景&#xff1a;查询商品列表后&#xff0c;去查看列表商品详情页。针对商品列表数据量比较大的&#xff0c;响应时间会比较长&#xff0c;就需要设置等待时间然后去查看商详 2.定时器的作用域&#xff1…

《005.SpringBoot+vue之学生选课管理系统01》

《005.SpringBootvue之学生选课管理系统01》 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatis; 前台&#xff1a;vueElementUI; [2]功能模块展示&#xff1a; 管理端 1…

渗透测试学习day1

文章目录 学习平台Starting Point靶机&#xff1a;Meow连接vpn创建靶机 解题过程Task 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8 总结 学习平台 hackthebox Starting Point 靶机&#xff1a;Meow 难度&#xff1a;very easy 连接vpn创建靶机 步骤如下 打开linux虚拟…

开发环境eclipse的安装与配置详细教程(包括UML插件 如何汉化 JDK 代码补全等)

Eclipse开发环境的安装与配置 1.Eclipse安装与配置 1.将JDK与Eclipse这两个软件安装包放在一个文件夹下&#xff0c;方便之后安装使用。 2.安装JDK 在D&#xff1a;LeStoreDownload\java文件夹下另外新建三个文件夹分别命名为java、jdk和eclipse&#xff08;分别用于Java、j…

NFTScan | 10.30~11.05 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.10.30~ 2023.11.05 NFT Hot News 01/ BAYC 系列 NFT 地板价回升至 30 ETH 10 月 30 日&#xff0c;据数据显示&#xff0c;Bored Ape Yacht Club&#xff08;BAYC&#xff09;系列 …

高速串行总线——SATA

SATA简介 SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件&#xff0c;一种基于行业标准的串行硬件驱动器接口)&#xff0c;它是一种电脑总线&#xff0c;主要功能是用作主板和大量存储设备&#xff08;如硬盘及光盘驱动器&#xff09;之间的数据传输 SA…

没有MES管理系统,先用数据采集设备能有用吗

在当前的数字化时代&#xff0c;企业纷纷意识到了数字化转型的重要性。数据被誉为新型生产要素&#xff0c;对于企业的运营和决策具有至关重要的作用。在数字化转型的过程中&#xff0c;许多企业面临着一个共同的问题&#xff1a;如何获取所需的数据&#xff1f; 有两家企业在…

实力控场,自成焦点!科士达工商业储能新品亮相上海SNEC储能展

11月1日&#xff0c;第八届SNEC ES 国际储能展在上海新国际博览中心盛大开幕。展会现场&#xff0c;科士达携工商业储能新品KAC120DS-BC233DE重磅亮相&#xff0c;该产品是继KAC50DP-BC100DE之后&#xff0c;科士达推出的又一重量级储能力作&#xff0c;完美覆盖用户侧工商业全…

Filter 和 Listener

Filter 表示过滤器。是JavaWeb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一。 过滤器可以把对资源的请求 拦截 下来。浏览器可以访问服务器上所有的资源&#xff0c;而在访问到这些资源之前可以使用过滤器拦截下来&#xff0c;也就是说在访问资源之前会先经…

微信小程序里怎么添加砍价活动

随着网络购物的普及&#xff0c;越来越多的消费者开始享受这种方便快捷的购物方式。而在这个大环境下&#xff0c;各种电商活动层出不穷&#xff0c;吸引了众多消费者的关注。而在这些活动中&#xff0c;砍价活动无疑是最受欢迎的一种。今天&#xff0c;我们就来聊一聊如何在小…

centos7 一键安装部署wvp-gb28181-pro

准备工作 下载finalshell工具 好用的shell工具&#xff0c;FinalShell_好用的shell软件-CSDN博客 设置服务器网络 ky10、centos7等linux系统修改网卡ip地址&#xff0c;并设置网卡开机自启_kylin配置ip-CSDN博客 wvp安装部署 上传文件到服务器 选择服务器上存储的路径&#…

Win10电脑更新显示缺少重要的安全和质量修复怎么解决?

在Win10电脑中用户点击更新系统&#xff0c;却收到了“你的设备中缺少重要的安全和质量修复”的提示&#xff0c;导致无法正常完成Win10系统的更新。下面小编给大家带来简单且有效的解决方法&#xff0c;解决后大家就能顺利完成Win10系统的升级&#xff0c;从而满足自己的个性化…

QML查看事件回调函数的参数

背景 QML里面&#xff0c;为事件写回调函数时&#xff0c;参数&#xff08;形参&#xff09;总是不确定是哪些。下面方式可以用来获取形参。 方法 方法一 打印控件类型 使用console.log&#xff0c;查看控件类型 MouseArea {id: mouseAreawidth: 100height: 100onPressed: {}…

taro 接入小程序原生语法代码包的配置

标题taro 接入小程序原生语法代码包的配置 1、微信小程序原生语法代码包拷贝到src目录下 2、config/index.js中配置拷贝原生代码包到编译后的目录中&#xff0c;并且增加编译排除原生代码包的配置 3、app.config.js中配置原生代码包路径、插件&#xff08;建议分包引入&…

人民邮电出版社70周年庆暨异步社区8周年庆成功举办,和鲸Heywhale荣获异步社区“2023年度最佳合作伙伴”奖

10月28日&#xff0c;人民邮电出版社 70 周年庆暨异步社区 8 周年庆活动在北京召开&#xff0c;和鲸科技荣获异步社区“2023年度最佳合作伙伴”奖&#xff0c;和鲸科技社区运营负责人王煜倩作为代表出席。 本次活动回顾了人民邮电出版社与异步社区的发展历程&#xff0c;展示了…

Ionic 模块组件的理解

1 Ionic4.x 文件分析 1.1 app.module.ts 分析 Ionic 是一个基于 Angular 的移动应用开发框架&#xff0c;能帮助开发者使用 Web 技术&#xff08;HTML5、CSS3、JavaScript&#xff09;创建跨平台的应用程序。在 Ionic 应用程序中&#xff0c;app.module.ts 文件是整个应用程序的…

亚马逊与TEMU平台欧代英代如何注册?注册欧代/英代流程及注意事项

亚马逊与TEMU平台欧代英代如何注册&#xff1f;注册欧代/英代流程及注意事项 亚马逊平台的商家的产品&#xff0c;由于受到欧盟商品安全新法规市场监管法规欧盟要求所有标有CE标志的商品&#xff0c;都要拥有欧盟境内的欧代作为商品合规的联系方式(也称为负责人)。由于英国脱离…