Spring基于注解存储对象

小王学习录

  • 前言
  • 基于注解存储对象
    • @Controller (控制器存储)
    • @Service (服务存储)
    • @Repository (仓库存储)
    • @Component (组件存储)
    • @Configuration (配置存储)
    • @Bean(方法注解)

前言

上一篇文章中已经介绍了在Spring中存储Bean和取Bean的方法. 而在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解. 这篇文章介绍如何基于注解存储对象

基于注解存储对象

基于注解存储对象第一步仍然是先修改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:context="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">
    <context:component-scan base-package="com.annotation"></context:component-scan>
</beans>

其中代码<context:component-scan base-package="com.annotation"></context:component-scan>是在注册要扫描的包, spring启动后, 会自动在指定的包(此处是com.annotation)下扫描, 找到加了注解的类, 然后创建Bean对象并存储到spring容器中. 接下来介绍存储Bean对象的注解.

用于存储Bean对象的注解有五大类注解和一个方法注解.
五大类注解分别是: @Controller, @Service, @Repository, @Component, @Configuration
方法注解: @Bean



@Controller (控制器存储)

@Controller
public class UseController {
    public void print(){
        System.out.println("do_useController");
    }
}

@Service (服务存储)

@Service
public class UseService {
    public void print(){
        System.out.println("do_useService");
    }
}

@Repository (仓库存储)

@Repository
public class UseRepository {
    public void print(){
        System.out.println("do_useRepository");
    }
}

@Component (组件存储)

@Component
public class UseComponent {
    public void print(){
        System.out.println("do_useComponent");
    }
}

@Configuration (配置存储)

@Configuration
public class UseConfiguration {
    public void print(){
        System.out.println("do_useConfiguration");
    }
}


在五大类注解中, @Controller, @Service, @Repository, @configuration都是@Component的子类.

对于五大类注解的Bean对象命名规则, 观察底层实现源码之后发现. 如果类名前两位都是大写, 则Bean对象名与类名一致. 如果类名第一位大写, 第二位小写, 则Bean对象名是类名第一位小写, 其他位不变.


@Bean(方法注解)

@Bean要搭配类注解一起使用, 使用 @Bean 注解标记的方法将会被Spring容器注册为一个Bean, 并且该Bean的实例将由该方法返回。

@Component
public class UserBeans {
    @Bean
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPassword("lisi");
        return user;
    }
}
	 User user = applicationContext.getBean("user1", User.class);
     System.out.println(user.getPassword());

在这里插入图片描述


@Bean注解中可以用namevalue指定Bean的对象名, 如果没有指定默认对象名默认为方法名. 上面的例子中没有指定对象名, 下面写一个指定对象名的例子.

@Component
public class UserBeans {
    @Bean(name = {"user0", "user"})
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPassword("lisi");
        return user;
    }
}
    User user = applicationContext.getBean("user0", User.class);
    System.out.println(user.getPassword());

上面的这个例子在获取Bean对象时, 可以用user0, 也可以用user, 但是默认的方法名(user1)不能使用.


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让工作更高效,那些不能错过的8款泳道图绘制工具

在现代企业的运营管理中&#xff0c;泳道图扮演了至关重要的角色。这种独特的图表工具以其直观、清晰的特点&#xff0c;帮助我们理解和改进复杂的工作流程&#xff0c;从而提升效率。本文将为你分享8款实用且高效的泳道图绘制工具&#xff0c;它们能够帮助你轻松创建出专业级别…

Emscripten运行时

本章将简要介绍Emscripten环境下与运行时相关的部分知识&#xff0c;包括消息循环、文件系统、内存管理等内容。 main函数与生命周期 生成本地代码时&#xff0c;作为C/C程序的入口函数&#xff0c;通常main()函数意味着程序的整个生命周期&#xff0c;程序随main()函数返回的…

第二十一章网络通信总结博客

局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission Control Protocol/I…

对Spring源码的学习:一

目录 BeanFactory开发流程 ApplicationContext BeanFactory与ApplicationContext对比 基于XML方式的Bean的配置 自动装配 BeanFactory开发流程 这里的第三方指的是Spring提供的BeanFactory&#xff0c;Spring启动时会初始化BeanFactory&#xff0c;然后读取配置清单&#…

力扣每日一题:1466. 重新规划路线(2023-12-07)

力扣每日一题 题目&#xff1a;1466. 重新规划路线 日期&#xff1a;2023-12-07 用时&#xff1a;45 m 36 s 时间&#xff1a;37ms 内存&#xff1a;69.64MB 代码&#xff1a; class Solution {public int minReorder(int n, int[][] connections) {list new List[n];Arrays…

IPTABLES(一)

文章目录 1. iptables基本介绍1.1 什么是防火墙1.2 防火墙种类1.3 iptables介绍1.4 包过滤防火墙1.5 包过滤防火墙如何实现 2. iptables链的概念2.1 什么是链2.2 iptables有哪些链 3. iptables表的概念3.1 什么是表3.2 表的功能3.3 表与链的关系 4. iptables规则管理4.1 什么是…

Shell数组函数:数组——数组和循环(二)

for脚本快速定义数组 [rootlocalhost ~]# vim for12.sh #脚本编辑 #!/bin/bash for a in cat /etc/hosts do hosts[o]$a donefor i in ${!hosts[]} do echo "$i : ${hosts[$a]}" done[rootlocalhost ~]# vim for12.sh #执行脚本区别 &#xff1a;for的空格分割…

coredump

linux原生 一、设置 $ cat /proc/sys/kernel/core_pattern 通过查看core_pattern文件&#xff0c;发现其确实指定了一个路径&#xff0c;于是我前往那个路径&#xff0c;发现竟然是脚本程序&#xff0c;后来查看说明文件&#xff0c;才知道core_pattern中如果首先指定了一个 …

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

DOS 批处理 (二)

DOS 批处理 1. 基础 DOS 命令1.1 基础命令1.2 文件系统操作1.3 文件夹管理1.4 文件管理1.5 网络相关1.6 系统管理1.7 IF、FOR和NETIFFORNET 1. 基础 DOS 命令 command /? 查找帮助DOS命令不区分命令字母的大小写 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

SQL面试题,判断if的实战应用

有如下表&#xff0c;请对这张表显示那些学生的成绩为及格&#xff0c;那些为不及格 1、创建表&#xff0c;插入数据 CREATE TABLE chapter8 (id VARCHAR(255) NULL,name VARCHAR(255) NULL,class VARCHAR(255) NULL,score VARCHAR(255) NULL );INSERT INTO chapter8 (id, n…

嵌入式系统

嵌入式系统 目前国内一个普遍认同的嵌入式系统定义是&#xff1a;以应用为中心、以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。&#xff08;引用自《嵌入式系统设计师教程》&#xff09; …

点评项目——商户查询缓存

2023.12.7 redis实现商户查询缓存 在企业开发中&#xff0c;用户的访问量动辄成百上千万&#xff0c;如果没有缓存机制&#xff0c;数据库将承受很大的压力。本章我们使用redis来实现商户查询缓存。 原来的操作是根据商铺id直接从数据库查询商铺信息&#xff0c;为了防止频繁地…

一维相位解包裹

一维相位解包裹 本文首先介绍最简单的一维的位相解包裹算法。设W是包裹运算符&#xff0c;中是解包裹位相&#xff0c;是包裹的位相。则一维位相解包裹可表示为&#xff1a; 解包裹就是要选取正确的k,满足&#xff1a; 两个相邻像素位相的差值如下&#xff1a; 由式(2-1)和式(2…

JOSEF快速中间继电器DZK-916 4A AC220V板后嵌入式安装

系列型号 DZK-911快速中间继电器&#xff1b;DZK-912快速中间继电器&#xff1b; DZK-914快速中间继电器&#xff1b;DZK-916快速中间继电器&#xff1b; DZK-917快速中间继电器&#xff1b;DZK-918快速中间继电器&#xff1b; DZK-924快速中间继电器&#xff1b;DZK-934快速中…

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异&#xff0c;高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机&#xff0c;以其高转速、高精度、高刚度的特点&#xff0c;在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…

【项目问题解决】IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()

目录 lombok找不到符号问题修改 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()&#xff0c;无法使用lombok下应有的注解&#xff0c;一度怀疑是版本问题 …

什么是SPA(Single Page Application)?它的优点和缺点是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

JVM理解

1、JVM是什么&#xff1f; JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。 他是帮助我们将java代码 生成编译后 的 class 文件。 2、JRE、JDK和JVM 的关系 …