spring 注解: 更加简单的存储 Bean

news2024/11/26 20:29:50

目录

1. 更加简单的存储 Bean

1.1 添加注解

1.1.1 @Controller【控制器存储】

1.1.2 @Service【服务存储】

1.1.3 @Repository【仓库存储】

1.1.4 @Component【组件存储】

1.1.5 @Configuration【配置存储】

1.1.6 类注解存储 Bean 的命名规则(默认命名规则)

1.1.7 方法注解 Bean

1.1.8 重命名 Bean


1. 更加简单的存储 Bean

前置工作:

1.1 添加注解

1️⃣通过类注解实现 Bean 对象的存储:@Controller、@Service、@Repository、@Component、@Configuration

2️⃣通过方法注解实现 Bean 对象的存储:@Bean

1.1.1 @Controller【控制器存储】

效验参数的合法性(安检系统)

@Controller
public class User {
    public void sayHi() {
        System.out.println("Hi, User");
    }
}
public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        User user = context.getBean("user", User.class);
        //3.使用 Bean 对象
        user.sayHi();
    }
}

1.1.2 @Service【服务存储】

业务组装(客服中心)

使用 @Service 存储 Bean:

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

读取 Bean:

public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        UserService userService = context.getBean("userService", UserService.class);
        //3.使用 Bean 对象
        userService.sayHi();
    }
}

1.1.3 @Repository【仓库存储】

实际业务处理(实际办理的业务)

使用 @Repository 存储 Bean:

@Repository
public class Teacher {
    public void sayHi() {
        System.out.println("Hi, Teacher");
    }
}

读取 Bean:

public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        Teacher teacher = context.getBean("teacher", Teacher.class);
        //3.使用 Bean 对象
        teacher.sayHi();
    }
}

1.1.4 @Component【组件存储】

工具类层(基础的工具)

使用 @Component 存储 Bean:

@Component
public class Teacher {
    public void sayHi() {
        System.out.println("Hi, Teacher");
    }
}

读取 Bean:

public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        Teacher teacher = context.getBean("teacher", Teacher.class);
        //3.使用 Bean 对象
        teacher.sayHi();
    }
}

1.1.5 @Configuration【配置存储】

使用 @Configuration 存储 Bean:

@Configuration
public class Teacher {
    public void sayHi() {
        System.out.println("Hi, Teacher");
    }
}

读取 Bean:

public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        Teacher teacher = context.getBean("teacher", Teacher.class);
        //3.使用 Bean 对象
        teacher.sayHi();
    }
}

1.1.6 类注解存储 Bean 的命名规则(默认命名规则)

1️⃣默认类对象首字母小写就能获取到 Bean 对象

Teacher teacher = context.getBean("teacher", Teacher.class);

2️⃣使用原类名可以获取到 Bean 对象

UConfig uConfig = context.getBean("UConfig", UConfig.class);

✅结论:

如果首字母是大写,第二个字母是小写,那么 Bean 的名称就是类名小写;

如果不满足首字母大写和第二个字母小写的情况,那么 Bean 的名称就为原类名。

 在这里 Bean 生成命名的源代码:

    public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }

public class Test {
    public static void main(String[] args) {
        String name = "Student";
        String name2 = "APPConfig";
        System.out.println(name + ":" + Introspector.decapitalize(name));
        System.out.println(name2 + ":" + Introspector.decapitalize(name2));
    }
}

命名规则:首字母和第二个字母大写返回原类名,否则就是首字母小写

1.1.7 方法注解 Bean

1️⃣使用 Bean——使用注意事项: @Bean 注解 必须要配合 五大类注解 一起使用

@Component
public class Articles {
    @Bean //将当前方法返回的对象存储到 IoC 容器中
    public ArticleInfo articleInfo() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(1);
        articleInfo.setTitle("今天周几");
        articleInfo.setContent("今天周一");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }
}

获取对象:

public class App {
    public static void main(String[] args) {
        //1.得到容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到 Bean 对象
        ArticleInfo articleInfo = context.getBean("articleInfo", ArticleInfo.class);
        //3.使用 Bean 对象
        System.out.println(articleInfo.toString());
    }
}

2️⃣Bean获取时注意事项:@Bean 的默认命名 = 方法名

    public ArticleInfo arc() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(1);
        articleInfo.setTitle("今天周几");
        articleInfo.setContent("今天周一");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }

获取 Bean:

ArticleInfo articleInfo = context.getBean("arc", ArticleInfo.class);

1.1.8 重命名 Bean

1️⃣

@Bean("aaa") 

2️⃣

@Bean(name = "bbb")

3️⃣

@Bean(value = "ccc")

重命名扩展:@Bean 支持指定多个名称

@Bean(value = {"ccc", "ddd"})

默认命名使用注意事项:当 @Bean 进行重命名之后就不可以使用默认的使用方法获取 Bean 对象 (注意和默认命名区别)

必须要使用名字获取,例如:

ArticleInfo articleInfo = context.getBean("article", ArticleInfo.class);

@Bean 名称注意事项:如果多个 Bean 名称相同,那么程序执行不会报错,但是第一个 Bean 之后的对象就不会存放在容器当中,也就是说只有第一次创建Bean 的时候会将 对象 和 Bean 存储的时候,容器会自动忽略

@Component
public class Articles {
    @Bean({"article"}) //将当前方法返回的对象存储到 IoC 容器中
    public ArticleInfo getArt() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(1);
        articleInfo.setTitle("今天周几");
        articleInfo.setContent("今天周一");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }

    @Bean({"article"}) //将当前方法返回的对象存储到 IoC 容器中
    public ArticleInfo getArt1() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(2);
        articleInfo.setTitle("今天学习了什么");
        articleInfo.setContent("注解");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }

    @Bean({"article"}) //将当前方法返回的对象存储到 IoC 容器中
    public ArticleInfo getArt2() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(1);
        articleInfo.setTitle("今天写博客了吗");
        articleInfo.setContent("写了");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }
}

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

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

相关文章

浅谈精密配电多回路监控装置在轨道交通项目上的应用

安科瑞 须静燕 行业背景 轨道交通作为城市公共交通系统的一部分,在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步,轨道交通系统也在不断引入新的技术和创新&#xff…

外汇天眼:本周监管警告名单更新,远离以下平台!

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

出差学知识No4:ubuntu vim中的各种必须掌握的经典操作(持续更新......)

1、给vim模式下打开的文档内容每行之前加上行号,便于问题定位 1、给vim模式下打开的文档内容每行之前加上行号,便于问题定位 摁一下Esc之后输入:set number

CentoS7 安装篇十二:mysql主从搭建(xtrackbackup不停机搭建)

一、mysql主从搭建使用mysql自身自己做,需要停止mysql服务进行,这种情况下面临以下问题 1.影响客户正在运行的软件,数据库比较大的情况下耗时时间长 2.如果不想影响客户使用体验,就是晚上加班搞 为了更好软件体验及避免加班情况&a…

Stm32_标准库_14_串口蓝牙模块_解决手机与蓝牙模块数据传输的不完整性

由手机向蓝牙模块传输时间信息,Stm32获取信息并将已存在信息修改为传入信息 测试代码: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"uint16_t num…

可能是入门高阶数学的好通道 —— 很直观易记,又很难判断的真假的数学命题们

1. 有理数和无理数 实数轴上,2.0右侧的第一个实数b,b是无理数;(么?) 2. 点的个数 实数轴上0.0到2.0之间距离,是0.0到1.0之间距离的2倍,所以,显然,0.0到2.0之…

【LeetCode刷题(数据结构与算法)】:上下翻转二叉树

给你一个二叉树的根节点 root ,请你将此二叉树上下翻转,并返回新的根节点 你可以按下面的步骤翻转一棵二叉树: 原来的左子节点变成新的根节点 原来的根节点变成新的右子节点 原来的右子节点变成新的左子节点 上面的步骤逐层进行。题目数据保…

大数据中间件——Kafka

Kafka安装配置 首先我们把kafka的安装包上传到虚拟机中: 解压到对应的目录并修改对应的文件名: 首先我们来到kafka的config目录,我们第一个要修改的文件就是server.properties文件,修改内容如下: # Licensed to the …

【每日一题】只出现一次的数字 III

文章目录 Tag题目来源题目解读解题思路方法一:位运算 其他语言cpython3 写在最后 Tag 【位运算】【数组】【2023-10-16】 题目来源 260. 只出现一次的数字 III 题目解读 找出数组中恰好只出现一次的连个元素,其余的所有元素均出现两次。要求算法的时间…

获取Steam余额的几种方式,及Steam余额被红锁的几种情况

今天就跟大家聊聊买余额的话题,获取Steam余额的几种方式,及Steam余额被红锁的几种情况。 什么是买余额呢? 指的就是卖家通过steam市场里面的饰品出售功能,把steam账号里的余额转移到买家账号中。 大家都知道,自从充值…

【前段基础入门之】=>CSS3新特性 2D 变换

导语: CSS3新特性,给我们带来了很多的丰富的过渡变换效果,这些效果使我们的页面效果变得更加的生动,这一章节,就给大家带来CSS3中的第一个变换效果:2D 变换 在正式了解2D 变换之前,我们需要了解&#xff0c…

啥?PS一秒成图?Adobe的逆天黑科技大公开

在日前举行的 Adobe MAX 创意大会上,Adobe Adobe Firefly Image 2(萤火虫二代成像模型)、Firefly Vector Model(萤火虫矢量模型)和Firefly Design Model(萤火虫设计模型)。 Firefly矢量模型是世…

155M传输分析仪 优劣势分析

D240S SDH测试模块,是FT100智能网络测试平台产品家族的一部分,是一个坚固耐用、锂电池超长供电的传统PDH/SDH测试解决方案,支持155Mbps到2.048Mbps速率的传输链路测试。支持在线和离线的传输链路的安装、维护和故障排除应用测试。 同时为经验…

分享一下微信小程序怎么添加抽奖活动

微信小程序是一种无需下载安装即可使用的应用,近年来在各行各业中得到了广泛应用。对于企业或商家而言,利用微信小程序开展抽奖活动可以吸引更多的用户关注,增加用户粘性并促进品牌传播。下面就以微信小程序添加抽奖活动为主题,探…

【Linux】环境下部署Nginx服务 - 二进制部署方式

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

SOLIDWORKS PDM—2024版本新增

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据,并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional,您的团队能够:1. 安全地存储和索引设计数据以实现快速检索;2. 打消关于…

从简单到复杂,MVI 架构定义与封装使用总结

前言 时间回到一年多前讨论度很高的 MVI 架构,现在也已尘埃落地,没有什么争议并各自都有自己的一套实现方案了,接下来我们就看看这些网上各种各样的 MVI 架构是如何从简单到复杂,从 Java 到 Kotlin 到协程再到 Compose 的各个场景…

gitee page中HTML显示乱码

参考的:静态HTML网页部署到gitee后中文乱码-CSDN博客 根据上述引用的博客做完后要记得在gitee page中更新(我就是没点更新以为用不了)

广告牌安全传感器怎么用?为城市能起到什么效果?

随着城市的迅速发展和经济的快速增长,广告牌在城市中扮演着越来越重要的角色。但是近年来广告牌缺乏修缮和维护,广告牌所带来的安全隐患逐年增加。 广告牌作为城市的明信片,出现损坏,且具有一定的安全隐患之后,给城市带…

你不一定全部知道的16种进程注入方法和注入工具(C语言版)

一、前言 提起进程注入,似乎感觉挺奇妙的,毕竟这是黑客的入门必备技术之一,互联网发展这么多年,每年都会有新的技术出现,自然也就有了很多的进程注入的方法。今天小编要和大家讲的是16种我们比较常见的进程注入方法&a…