更简单的存和取bean

news2024/11/25 0:30:05

    • 注解(更简单存bean和取bean)
    • 更简单的存bean(使用类注解)
    • 方法注解
    • 更简单的获取bean

注解(更简单存bean和取bean)

注解:声明和表示这个类或方法有某个能力。servlet的Web注解;实现路由的注册。
逻辑两种实现方式:
编译器自动生成代码;直接给你加上代码。(注解替换对应的代码)
拦截;事务;先拦截;然后开启事务;让程序执行;如果中途程序执行失败;回滚事务;如果方法执行成功就提交事务。

储存Bean:
(之前的储存的方法一点麻烦;比直接new对象还要麻烦;存一个就要去配置文件添加bean标签。)
使用注解储存:存对象在spring中有两种注解类型;加了这些注解的类;就会自动的帮我存。
1.类注解@controller、@Service、@Repository、@Compooent、@Configurtion
5大注解:
Controller;控制器和用户打交道;这个类将是和用户直接接触;校验工作。检查前端的传参正不正确和合不合规。跟高铁安检一样。(比如sql注入;或者黑客爬虫;访问频率特别高;发现就给他拉黑名单)
service:服务层;实现这个功能需要调用哪些接口;它会帮你调用。但是底下执行不是在这里操作数据库
Repository:持久层;操作数据库;执行者。(DAO层就是数据交互层;持久层是它的一种实现。可以理解一个东西)
Compooent:组件;以上都不适合放上面的东西;比如加密;就放在这里给spring托管。
Configurtion:配置项;项目一些配置配置
2.方法注解@Bean

更简单的存bean(使用类注解)

准备工作:
在这里插入图片描述
为了极致的性能:告诉它;哪个目录需要扫描;不可能全部的类都去扫描;拉低效率。不配置这个东西;哪怕你加了注解;但是依然也不会工作的。在这个路径下;如果有五大注解的就添加到spring。(路径外是没效果的)

使用:
在这里插入图片描述
取bean;目前还是使用之前的方法验证。
但是有个问题;我之前是通过id来存取的;现在怎么取呢、(使用注解没有id )。如果用原类名会报错;(约定:首字母大小换小写就能取。特殊情况第二个字母也是大写SController;这种使用原类名)
在这里插入图片描述
成功取到这个对象并执行方法
在这里插入图片描述
这里使用其它的注解也是同样能达到效果;但是不规范;因为不同注解是在不同的层次上工作。

1:bean也能搭配这个component-san使用:为了针对上述Content补充。
2:如果五大类注解你加在这个路径之外;是不能读取的;为了性能只会扫描配置的包里。
3:在配置的这个包低下;不加5大类注解;也是不能读取到和添加到spring里;
4:在上述配置的路径底下再建一个包;那能不能在这个新建的包底下加的注解;能不能成功储存进去。可以的。
在这种情况下的;父包和子包有相同名字的类呢;能不能顺利的存和取。不能的;储存的时候就报错了;注解关于这个类有两个。(要么改类名;要么起别名;注解有个value属性;避免这种情况;)

五大注解关系:
其它的全是基于compoent实现。相当于一个父类;四个子类。子是父的一个扩展。产生这个多注解是为了分层下的工作。
javaEE标准分层:至少要包含三层;控制层;服务层,数据交互层(叫数据持久层比较多;经常一张表对应一个)一般公司会在三层的基础上扩展和细分。注解能很好的标识;一看这个注解就知道是哪层的。
在这里插入图片描述

bean命名规则:两套;默认情况类名首字母小写;如果默认情况不行就使用原类名;那就一定可以。
Ctrl+shift+R全局搜索;搜索beanname;优秀的代码肯定是有能望文生义的名字;试一试能不能找到结果。源自jdk的一种命名规则。
在这里插入图片描述

方法注解

bean是方法注解;不能加在类上;加在方法上;要求当前的方法必须有返回值;得搭配类注解一起用。(spring规定;还是为了效率、性能;因为使用bean还是少数的;我不可能所有的方法都要将这个返回值储存进去;所以就加个注解;只扫描这个注解里的。)
命名规则
默认情况下储存的对象名等于方法名。取的时候有点尴尬;方法名作为对象名。
设置名字:Bean注解的name属性;重命名的效果。但是这个命名可以是数组(可以起很多个名字);name和value属性都是同样的重命名。所有的名字都可以取。这时候原来的方法也就无法进行获取对象。

先凭空产生个对象;用来存;里面生成get和set方法。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果方法名一样:
两个类里;方法名是一样的;并且我们也不重命名;那这是什么情况呢;相当于覆盖?@order 注解有个value设置;名字的设置;这个值越小;就越先加载。后面的会覆盖前面的。
重载:参数没法注入;我们没法给这个参数传东西。。。所以这种bean只能是无参的。不行的。

更简单的获取bean

对象装配;也叫DI;依赖注入。
1:属性注入
加注解从spring得到这个对象;然后给这个变量。不能在static里写;静态的执行是高于这个spring的拿对象的;通过注解是得不到bean对象。加载顺序高于spring。后面spring boot和spring MVC是可以拿;因为是通过tomcat启动的。(所以main方法里的取对象还是之前的三板斧)
在这里插入图片描述
一个注解就能搞定;非常简洁
在这里插入图片描述
它是先去spring读取有没有这个类型的对象;如果只有一个对象就赋值于我们这个变量;我们这个变量的取名尽量是和spring的bean是一样;当然你使用us;aaa;usaaa也是能正常读取到这个对象。如果有多个对象;就会根据这个名字去匹配唯一的对象。

优点:简洁
缺点:没法实现final修饰变量的注入。(没法给final修饰的属性赋值);兼容不好;只适用于IoC容器。
写法简单;唯一单一设计原则概率更大。单一;一个类只做一件事情。

2:setter注入;set方法右键生成就好了
在这里插入图片描述

这个注解取的spring的bean会给参数赋值;
优点:
始终传的是单一的对象;符合单一设计原则;每个方法只传递一个对象。
缺点:没法实现final修饰变量的注入。
注入的对象可能会被改变;比如注入完;代码在下方又调用这个setter方法;并传一个参数;就把这个对象改变了。我可以任意的位置调用这个方法;修改这个传入的参数。
在这里插入图片描述

3:构造方法注入;官方推荐
只有一个构造方法;允许你不加@Autowired都行
在这里插入图片描述
优点:
1:可以实现final修饰变量的注入。(final修饰对象两个条件之一;要么直接赋值;要么在构造方法中赋值)
2:注入的对象不会被改变(构造方法只会执行一次)
3:构造方法注入可以保证注入对象被完全初始化
4:通透性更好

这里优缺点的理解不是特别清晰啊。

另一种注入关键字:
这个是jdk;上面是spring的;就把刚才上面的注解换成这个;效果是一样的。但是这个注解在构造方法注入是不能用的。
区别:
来自的地方不同;jdk;spring。
注入的支持上;构造方法注入不支持
reyention支持更多参数设置;正常使用两个是没有区别的;特殊场景;autowired是有短板了;可以用repention弥补。

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

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

相关文章

2000多套微信小程序源码-史上最全的不同行业的源码集合

前言 提示:这里可以添加本文要记录的大概内容: 很多伙伴学习小程序不知怎么开始,我准备了2000多套小程序源码,基本覆盖各个行业,大家有需要的可以借鉴学习~ 提示:以下是本篇文章正文内容,下面…

“数字人交互,与虚拟的自己互动”——用PaddleAvatar打造数字分身,探索人机交互的未来

“数字人交互,与虚拟的自己互动”——用PaddleAvatar打造数字分身,探索人机交互的未来 你是否曾经幻想过与自己的虚拟人交互?现在,使用PaddleAvatar,您可以将自己的图像、音频和视频转化为一个逼真的数字人视频&#…

Spring Cloud Alibaba--Nacos集群配置

文章目录 一、Nacos持久化配置二、Nacos集群配置三、避坑指南集群端口号冲突问题内存不足,无法启动的问题 一、Nacos持久化配置 Nacos默认自带的是嵌入式数据库derby,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。 …

Goby 漏洞更新 |secnet-智能路由系统 actpt_5g.data 信息泄露

漏洞名称:secnet-智能路由系统 actpt_5g.data 信息泄露 English Name:secnet Intelligent Router actpt_5g.data Infoleakage CVSS core: 7.5 影响资产数:71768 漏洞描述: secnet安网智能AC管理系统是广州安网通信技术有限公…

mysql错误:2059 - Authentication plugin ‘caching_ sha2_password‘ cannot be loaded:

这个错误是因为MySQL数据库使用了 caching_sha2_password 插件进行身份验证,而该插件需要 MySQL 8.0.4 及以上版本的 MySQL 客户端才能够使用。 如果你使用的是旧版本的 MySQL 客户端,可以考虑升级到 MySQL 8.0.4 或更高版本。如果升级不是一个可行的选…

Windows重启mysql的方法(快速简单)

目录 一、背景 二、操作步骤 错误做法 正确做法 一、背景 有时候修改了数据库,但是MySQL数据库内容有延迟缓存,那么就需要重启一下数据库去解决问题 二、操作步骤 错误做法 直接去cmd命令里面输入net stop mysql这样停止,这样很可能…

【C++初阶】C++模版(进阶)

文章目录 前言一、非类型模板参数二、模板的特化概念函数模板特化类模板特化1.全特化3.偏特化 三、模板分离编译什么是分离编译模板的分离编译解决方法 模板总结 前言 前边我们讲解了模版初阶的内容,对泛型编程,函数模版,类模板有了一定的认…

上海亚商投顾:沪指失守3300点关口 AI应用方向大幅调整

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日集体调整,尾盘均跌超1%,沪指失守3300点关口,日线录得4连阴走势。游…

IS210AEPSG1AFC磁场由串联励磁绕组和并联励磁的组合提供

​ IS210AEPSG1AFC磁场由串联励磁绕组和并联励磁的组合提供 复合发生器 在这种类型中,磁场由串联励磁绕组和并联励磁的组合提供,并联磁场有许多圈数的导线,但它只承载小电流,而串联励磁绕组有几圈粗线并承载负载电流 串联励磁绕组…

【JAVAEE】线程池基础知识⭐

目录 1.什么是线程池 2.为什么要使用线程池 3.怎么使用线程池 4.自定义一个线程池 5.为什么不推荐使用系统自带的线程池 5.1线程池构造方法的参数和含义 5.1.1拒绝策略 5.2线程池的工作原理 5.3为什么不适用系统自带的线程池 补充:工厂模式 1.什么是线程池…

stm32 74hc595外扩io 调试记录

本文使用的测试代码如下 (1条消息) stm3274hc595外扩io调试工程,软件代码2片74hc595级联外扩IO资源-CSDN文库 有个项目对成本比较敏感,又想用ST的片子,输出管脚比较多,就考虑外扩IO,也有一些外扩IO的片子但是用下来成…

视频理解AI模型分类与汇总

人工智能领域视频模型大体也经历了从传统手工特征,到卷积神经网络、3D卷积网络、双流网络、transformer的发展脉络。 视频的技术大多借鉴图像处理技术,只是视频比图片多了一个时间维度。 下面内容先简单汇总下,后续再逐渐补充。 1. 双流网…

DS200SLCCG1AFG随着频率的增加而增加。具有高 Dk 的基材将具有高 Df。

​ DS200SLCCG1AFG随着频率的增加而增加。具有高 Dk 的基材将具有高 Df。 Df 耗散因数(又名损耗角正切) Df 测量由于电阻加热而损失了多少功率。PCB 基板形成电容器作为绝缘体,导体通常位于两侧。作为电容器,它会表现出容抗&#…

MySQL---聚合函数、字符串函数、数学函数、日期函数

1. 聚合函数 数据准备: create database mydb4; use mydb4;create table emp(emp_id int primary key auto_increment comment 编号,emp_name char(20) not null default comment 姓名,salary decimal(10,2) not null default 0 comment 工资,department char(20…

激光切割机要换新该怎么选?如何减少激光加工设备的老化问题?

激光器的销量持续攀高,激光切割机的应用领域涉及众多行业。随着加工范围和厚度的提升,运行多年的中低功率 激光切割机已经不能满足时下很多设备加工的需求,要提企业的加工能力,选择一款新的激光加工设备已是势在必行。 激光切割机…

Ubuntu使用(持续更新中)

文章目录 1.以root身份登录2.配置apt源3.安装Docker3.1BUG: 4.在VMware中克隆Ubuntu5.配置apt国内源 额 我们项目用的CentOS7,由于CentOS8停止了维护,客户反馈了这个问题,所以玩一下Ubuntu,我使用的是Ubuntu Serve LST,如有不同,另行百度 1.以root身份登录 Ubuntu默认是不开启r…

java异常的声明、捕获、抛出、处理(throws、throw、try-catch详解)

异常的处理 LBYL: Look Before You Leap. 在操作之前就做充分的检查. 即:事前防御型 boolean ret false; ret 登陆游戏(); if (!ret) { 处理登陆游戏错误; return; } ret 开始匹配(); if (!ret) { 处理匹配错误; return; } ret 游戏确认(); if (!ret) { 处理游…

在职读研是理想还是情怀?你想要的都将在社科大能源管理硕士项目实现

在职读研是理想还是情怀呢,每个读研人的想法不同,原因也有所不同。但选择在职继续攻读硕士学位的群体也有着共同点,他们都是想拥有高学历,拥有高目标的一群人。探寻新的起点和终点是他们想所要追求的。不管读研的初心是什么&#…

Figma怎么导出PDF文件?

Figma 是一款备受网页和 UI 设计师喜爱的基于矢量的设计工具。其最大的优势在于方便用户与团队成员进行协作。当设计师需要与其他团队成员、设计师或客户共享设计文件时,设计师需要将设计图案导出为 PDF 格式以方便查看。同样地,当设计师需要将设计图稿打…

优维低代码实践:数据模型设计

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…