Spring关于注解的使用

news2024/11/15 8:38:09

目录

一、使用注解开发的前提

1.1 配置注解扫描路径

二、使用注解创建对象

2.1 @Controller(控制器储存)

2.2 @Service(服务储存)

2.3 @Repository(仓库储存)

2.4 @Component(组件储存)

2.5 @Configuration(配置储存)

2.6 为什么要这么多类注解

2.7 方法注解@Bean


一、使用注解开发的前提

经历过了Spring的配置文件创建对象之后,我们发现这个方法其实还是有点麻烦,那么有什么更好的方法去创建对象嘛?有!注解的方式创建对象

1.1 配置注解扫描路径

在使用注入创建对象的时候,首先就需要在Spring的配置文件中去配置注解的扫描路径,注意这个配置文件中的其他东西一定要正确不然可能会报一些莫名其妙的错

<?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:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!--    配置注解的扫描路径-->
    <content:component-scan base-package="com.gl.demo"/>
</beans>

这里需要注意的是,你配置的包扫描路径是有范围限制的,我这里配置的到demo包底下,如果我还有一个包不在demo包底下,那么这个包下面的注解都是不会生效的

二、使用注解创建对象

在配置文件中配置了包扫描路径之后,我们就可以开始使用注解创建对象的方式来替代在配置文件中创建对象的方式了。接下来将介绍几种常用的注解

  • 类注解:@Controller、@Service、@Repository、@Component、@Configuration
  • 方法注解:@Bean

    就是通过这几个注解,代替了原来配置文件中的标签

2.1 @Controller(控制器储存)

类注解顾名思义就是在类上面添加注解

@Test
public void test() {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
    UserController userController = ctx.getBean("userController",UserController.class);
    userController.sayHi("张三");
}

接下来通过Spring的配置工厂来获取对象

@Test
public void test() {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
    UserController userController = ctx.getBean("userController",UserController.class);
    userController.sayHi("张三");
}

这里可以可以发现即使配置文件中没有写bean标签也可以创建出对象了,由于后面的类注解方式也是一样的就不多解释了

2.2 @Service(服务储存)

@Service
public class UserService {
    public void sayHi(String name) {
        System.out.println("Hi," + name);
    }
}

2.3 @Repository(仓库储存)

@Repository
public class UserRepository {
    public void sayHi(String name) {
        System.out.println("Hi," + name);
    }
}

2.4 @Component(组件储存)

@Component
public class UserComponent {
    public void sayHi(String name) {
        System.out.println("Hi," + name);
    }
}

2.5 @Configuration(配置储存)

@Configuration
public class UserConfiguration {
    public void sayHi(String name) {
        System.out.println("Hi," + name);
    }
}

2.6 为什么要这么多类注解

其实这个注解在底层的实现方式都是一样的,那为什么搞出这么多呢?这是为了代码的可读性!什么层用什么注解一目了然。还要注意的是,这里的类名就是之前配置文件中的id值,所以我们可以直接通过类名首字母小写的方式获取到对象如果类名是两个大写字母开头那就使用原类名获取对象

2.7 方法注解@Bean

这里的@Bean就是原来的在配置文件中的Bean标签,所以当我们的方法返回一个对象的时候就可以使用这个@Bean注解,同时方法名就是原来配置文件中的id值。最后也是最重要的一点就是,这个方法注解需要搭配类注解一起使用

@Component
public class Users {
    @Bean
    public User user1() {
        User user = new User();
        user.setId(1);
        user.setName("Java");
        return user;
    }
}
public void test() {
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    User user = (User) context.getBean("user1");
    System.out.println(user.toString());
}

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

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

相关文章

自研框架跻身全球 JS 框架榜单,排名紧随 React、Angular 之后!

前言 终于实现了一个重要目标&#xff01;我独立研发的 JavaScript 框架 Strve&#xff0c;最近发布了重大版本 6.0.2。距离上次大版本发布已经接近两个月&#xff0c;期间进行了大量的优化&#xff0c;使得框架性能和稳定性都得到了大幅度的提升。在上次的大版本更新中&#…

DevOps持续集成-Jenkins(2)

文章目录 DevOpsDevOps概述Integrate工具&#xff08;centos7-jenkins主机&#xff09;Integrate概述Jenkins介绍CI/CD介绍Linux下安装最新版本的Jenkins⭐Jenkins入门配置安装必备插件⭐安装插件&#xff08;方式一&#xff1a;可能有时会下载失败&#xff09;安装插件&#x…

负载均衡--Haproxy

haproxy 他也是常用的负载均衡软件 nginx 支持四层转发&#xff0c;七层转发 haproxy也可以四层和七层转发 haproxy&#xff1a;法国人开发的威利塔罗在2000年基于C语言开发的一个开源软件 可以支持一万以上的并发请求 高性能的tcp和http负载均衡2.4 1.5.9 haproxy&#…

微服务-Eureka

文章目录 提供者与消费者Eureka注册中心搭建EurekaServer服务注册服务发现项目结构 提供者与消费者 Eureka注册中心 服务消费者该如何获取服务提供者的地址信息&#xff1f; 服务提供者启动时向eureka注册自己的信息 eureka保存这些信息 消费者根据服务名称向eureka拉取提供者信…

10.Z-Stack协议栈移植

一、下载Z-Stack协议栈源文件 安装过程全部默认下一步即可&#xff0c;安装完成后会在C盘根目录下生成一个【Texas Instruments】文件夹 二、删除一些不必要的文件 将【ZStack-CC2530-2.3.0-1.4.0】文件夹&#xff0c;复制到自己放置ZigBee工程的文件夹下进入到【ZStack-CC253…

vue + html + Lodop打印功能

1.官网下载 http://www.lodop.net/download.html 2.解压安装运行 点击CLodop_Setup_for_Win32NT.exe进行安装 3.vue代码实现&#xff08;具体操作见官网&#xff1a;http://www.lodop.net/faq/pp35.html&#xff09; 3.1把官方提供的LodopFuncs.js文件保存到项目某个目录下 …

C# 使用base64编码用于加密和解密

base64编码原理&#xff1a;Base64编码是一种将二进制数据转换为ASCII字符的编码方式。它使用64个字符来表示二进制数据&#xff0c;包括大小写字母、数字和两个符号。将3个字节的二进制数据转换为4个字符的文本数据&#xff0c;如果不足3个字节&#xff0c;则在末尾补0&#x…

el-tree横向纵向滚动条

el-tree未展开时样式 el-tree展开时样式 给容器一个高度&#xff0c;然后样式加上overflow: scroll&#xff0c;这样纵向滚动条就出来了。 <el-card style"height: 528px;overflow: scroll"><el-inputplaceholder"输入关键字进行过滤"v-model&…

是顺流还是逆流?未来物流作业是否将被机器人全面取代?

原创 | 文 BFT机器人 随着人工智能的加速发展&#xff0c;各行业为适应数字时代的潮流&#xff0c;纷纷引入智能制造&#xff0c;帮助企业实现产业升级。而物流行业也不例外&#xff0c;现今人们的生活速度加快&#xff0c;为了快捷便利&#xff0c;很多的人喜欢通过网购、快递…

【Linux】Ubuntu升级nodejs版本

在下载nvm对nodejs版本进行管理时&#xff0c;由于网络因素一直下载失败&#xff0c;于是采用了新的方法对nodejs版本进行升级。 首先我们先查询一下现存的nodejs版本号&#xff0c;发现是12 我们下载一个名为n的软件包&#xff0c;n 是一个非常方便的 Node.js 版本管理工具&am…

【C++】Map和Set -- 详解

一、关联式容器 在初阶阶段&#xff0c;我们已经接触过 STL 中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list&#xff08;C11&#xff09;等&#xff0c;这些容器统称为 序列式容器 &#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存…

CCF中国开源大会,中电金信与行业共探AI技术在金融行业的应用和前景

10月21日&#xff0c;以“开源联合&#xff0c;聚力共赢”为主题的2023 CCF中国开源大会在长沙开幕。中电金信副总经理、研究院院长况文川参加峰会&#xff0c;在“算力与大模型”主题论坛上发表演讲&#xff0c;与行业共同交流AI、大模型等技术在金融行业的应用与前景。 况文川…

bp前端验证码绕过及token绕过

前端验证码绕过及token绕过 原文参考&#xff1a;xiu 文章目录 前端验证码绕过及token绕过原文参考&#xff1a;[xiu](http://www.xiusafe.com/2023/10/25/%E9%AA%8C%E8%AF%81%E7%A0%81%E7%BB%95%E8%BF%87/)1 验证码爆破1. 登录Pikachu&#xff0c;先获取登录的api接口2 验证码…

基于Java的药品商城管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

jenkins配置gitlab凭据

下载Credentials Binding插件&#xff08;默认是已经安装了&#xff09; 在凭据配置里添加凭据类型 点击保存 Username with password&#xff1a; 用户名和密码 SSH Username with private 在凭据管理里面添加gitlab账号和密码 点击全局 点击添加凭据&#xff08;版本不同…

指针相关面试题目

数组名的意义&#xff1a; 1. sizeof( 数组名 ) &#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。 2. & 数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表示首元素的地址。 下…

【wespeaker】模型ECAPA_TDNN介绍

本次主要介绍开源项目wespeaker模型介绍 1. 模型超参数 model_args: feat_dim: 80 embed_dim: 192 pooling_func: “ASTP” projection_args: project_type: “softmax” # add_margin, arc_margin, sphere, softmax scale: 32.0 easy_margin: False 2. 模型结构 2.1 Layer…

python打包和运行技巧

一、打包的几种方法 Python 有多种打包方式可用于将脚本打包成可执行文件&#xff0c;以便在没有 Python 解释器的环境中运行。以下是一些常见的 Python 打包方式&#xff1a; 使用 pyinstaller&#xff1a;pyinstaller 是一个常用的第三方工具&#xff0c;可以将 Python 脚本…

中间件安全-CVE 复现K8sDockerJettyWebsphere漏洞复现

目录 服务攻防-中间件安全&CVE 复现&K8s&Docker&Jetty&Websphere中间件-K8s中间件-Jetty漏洞复现CVE-2021-28164-路径信息泄露漏洞CVE-2021-28169双重解码信息泄露漏洞CVE-2021-34429路径信息泄露漏洞 中间件-Docker漏洞复现守护程序 API 未经授权访问漏洞…

题目 1119: C语言训练-“水仙花数“问题1(python详解)——练气三层中期

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f352;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…