Spring 更简单的读取和存储Bean【注解篇,属性注入,set注入,构造方法注入】

更加简单的存取Bean对象:

一. 五大类注解和一个方法注解

        @Controllor:控制器,验证用户请求数据的正确性;【安保】

        @Service:服务层,编排和调度具体的执行方法;【服务台】

        @Repository:持久层,数据访问层,与数据库做交互;【执行者,数据访问】

        @Component:组件,存放工具类;【工具】

        @Configuration:配置项【基础配置】

        @Bean【唯一的方法注解】

二.spring-config中配置扫描路径

<?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.bit.service"></content:component-scan> 
</beans>

 其中,在com.bit.service中的类添加了五大类注解,可以被添加到Spring容器中,其他没在配置文件中扫描的路径,无法被添加到Spring容器

三、方法注解@Bean存取对象

默认情况下,原类名的首字母小写【小驼峰】或原类名【开头两个及以上的字母均为大写】

3.1存对象 

@Component
public class UserBeans {@Beanpublic Student student1(){Student student = new Student();student.setAge(18);student.setId(210210210);student.setName("zhangsan");return student;}@Beanpublic Teacher teacher1(){Teacher teacher = new Teacher();teacher.setAge(25);teacher.setId(22222222);teacher.setName("老师");return teacher;}
}

存对象:在上述student1()和teacher1()方法中,都加了@Bean注解,该注解的作用是将被其修饰的方法的返回值存放到 Spring 中 

 3.2取对象

public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");Teacher teacher = context.getBean("teacher1",Teacher.class);teacher.sayHi();}

取对象:将@Bean修饰的方法名和类型传给上下文对象进行获取 

注意:<bean>方法注解

1.  ①方法名就是->实体名 ②类要有五大类注解,配合使用 ③必须要有返回值

2. <bean name={"","",""}> <bean value={"","",""}> 重命名,可以起多个名字

3. 当重命名之后,原方法名就不能获取到对象了 

4. 允许同样的对象在Spring中存储多个  

5. 存在不同方法中方法名相同且都被Bean修饰,可以通过@Order(int) 改变注入顺序,越小优先级越高 

6. <bean>可不可以和<component-scan>包下同时使用------>可以

四、更简单的读取Bean【不能在启动类使用 static的优先级高于Spring】

1.属性注入  先判断类型读取,当有多个就根据起的变量名字进行读取【在属性上@Autowired】

缺点:①没办法实现final修饰的的变量注入②只适用于IoC中(兼容性不好)③违背单一设计原则概率更大

 【UserService代码(伪代码)】

@Service
public class UserService {public Teacher getUserById(int id){//......Teacher teacher =new Teacher();teacher.setId(22);System.out.println("UserService->getUserId");return teacher;}
}

  【StudentController代码】

@Controller //将当前类存储到Spring中
public class StudentController {@Autowiredprivate UserService userService;public void sayHi(){System.out.println("Student Hi~");}public Teacher getById(int id){return userService.getUserById(id);}
}

 【启动类】

public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//        Teacher teacher = context.getBean("teacher1",Teacher.class);
//        teacher.sayHi();StudentController studentController = context.getBean(StudentController.class);studentController.getById(59);}

其中体现是属性注入 的语句是:在属性上直接添加了@Autowired注解,直接从Spring容器中获取

2.Setter注入【普通的set方法】【在set方法上加@Autowired】

利用@Autowired给方法,可以给方法的参数中的对象进行注入

优点:每次只传递一个对象,符合单一设计原则

缺点:①没办法实现final修饰的的变量注入②使用Setter注入的对象可能会被修改

@Controller //将当前类存储到Spring中
public class StudentController {private UserService userService;//set注入@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}public void sayHi(){System.out.println("Student Hi~");}public Teacher getById(int id){return userService.getUserById(id);}
}

区别于属性注入在于在set方法上加上@Autowired 

3.构造方法注入(Spring官方推荐)【构造方法上加@Autowired】

如果仅有一个构造方法,可以不加@Autowired

优点:1.可以注入final的对象2.注入对象不会被改变(构造方法只执行一次)3.可以保证注入对象完全被初始化4.通用性更好 

@Controller //将当前类存储到Spring中
public class StudentController {//构造方法注入private UserService userService;@Autowiredpublic StudentController(UserService userService) {this.userService = userService;}public void sayHi(){System.out.println("Student Hi~");}public Teacher getById(int id){return userService.getUserById(id);}
}

在构造方法上加入@Autowired 

问题:为什么构造方法可以注入一个不可变的对象,而属性注入和Setter不行?

答:在 Java 中规定被 final 对象必须满足一下两个条件的其中一个

①创建时直接赋值②构造方法赋值

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

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

相关文章

电流流过电阻时会减小吗?

我相信很多人刚接触电路时都会有这个想法&#xff1a;由于电阻会抵抗或阻碍电荷的流动&#xff0c;假如现在电流往一个方向流动&#xff0c;且电路中只有一个电阻器&#xff0c;那么从电流流出的地方到刚接触电阻中间应该有有高电流&#xff0c;从电阻刚流出到最后应该有低电流…

使用WPS自动化转换办公文档: 将Word, PowerPoint和Excel文件转换为PDF

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Ubuntu配置深度学习环境(TensorFlow和PyTorch)

文章目录 一、CUDA安装1.1 安装显卡驱动1.2 CUDA安装1.3 安装cuDNN 二、Anaconda安装三、安装TensorFlow和pyTorch3.1 安装pyTorch3.2 安装TensorFlow2 四、安装pyCharm4.1 pyCharm的安装4.2 关联anaconda的Python解释器 五、VScode配置anaconda的Python虚拟环境 前言&#xff…

Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘

就是我在反序列化时&#xff0c;遇到这样一个警告&#xff1a; Unchecked cast: java.lang.Object to java.util.ArrayList<com.work1.Student>然后我去网上查&#xff0c;有些人说用SuppressWarnings(“unchecked”)去忽略警告&#xff0c;但是我觉得作为一名合格的程序…

AWS-Lambda之导入自定义包-pip包

参考文档&#xff1a; https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python https://blog.csdn.net/fxtxz2/article/details/112035627 简单来说,以 " alibabacloud_dyvmsapi20170525 " 包为例 ## 创建临时目录 mkdir /tmp cd ./tmp …

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎&#xff0c;使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…

循环语句

章节目录&#xff1a; 一、while 循环1.1 句式与基本使用1.2 while...else1.3 单行语句 二、for 循环2.1 句式与基本使用2.2 for...else2.3 range() 函数 三、退出循环3.1 break3.2 continue 四、pass 语句五、结束语 一、while 循环 1.1 句式与基本使用 句式&#xff1a; w…

postgresql-管理表空间

postgresql-管理表空间 基本概念创建表空间用户授权移动表空间 修改表空间移动表空间位置 删除表空间 基本概念 在 PostgreSQL 中&#xff0c;表空间&#xff08;tablespace&#xff09;表示数据文件的存放目录&#xff0c;这些数据文件代表了数 据库的对象&#xff0c;例如表…

buuctf-[RoarCTF 2019]Easy Java

第一次遇到java类的题目 打开环境&#xff0c;很像sql 点击help 以为是文件包含&#xff0c;&#xff0c;但是不对 这里需要了解JAVA WEB目录结构 WEB-INF&#xff1a;Java的web应用安全目录&#xff1b; 此外如果想在页面访问WEB-INF应用里面的文件&#xff0c;必须要通过w…

音乐创作软件:ToneLIB Jam v4.7.8 Crack

从强大的选项卡编辑器到 3D 模式 Tonelib Jam 是一款用于播放和创作音乐的综合软件应用程序。TL Jam专为初学者和经验丰富的吉他手而设计&#xff0c;可以提供一个完美的平台来掌握乐器&#xff0c;让您轻松学习自己喜欢的歌曲或设置高效的日常吉他练习程序。TL Jam 具有功能强…

华为云云耀云服务器L实例评测|使用华为云耀云服务器L实例的CentOS部署Docker并运行Tomcat应用

目录 前言 步骤1&#xff1a;登录到华为云耀云服务器L实例 步骤2&#xff1a;安装Docker 并验证Docker安装 步骤3&#xff1a;拉取Tomcat镜像并运行Tomcat容器 步骤4&#xff1a;放行8080端口 步骤5&#xff1a;访问tomcat 步骤6&#xff1a;管理Tomcat容器 小结 前言 …

27、Flink 的SQL之SELECT (Pattern Recognition 模式检测)介绍及详细示例(7)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

【论文阅读】大语言模型中的文化道德规范知识

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;论文阅读 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对…

GEO生信数据挖掘(四)数据清洗(离群值处理、低表达基因、归一化、log2处理)

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 离群值处理 删除 低表达基因 函数归一化&#xff0c;矫正差异 数据标准化—log2处理 完整代码 上节围绕着探针ID和基因名称做了一些清洗工作&#xff0c;还做了重复值检查…

酷开科技OTT大屏营销,做好价值塑造

洞察2023&#xff0c;随着技术与数据入局OTT领域&#xff0c;程序化投放、数据追踪、人群定位等等能力正逐步深入&#xff0c;围绕OTT大屏营销&#xff0c;新营销的价值也正在被重构。随着国内5G、人工智能、云计算等技术不断普及&#xff0c;大屏营销服务成为OTT行业发展的主流…

使用 Python 给 PDF 添加目录书签

0、库的选择——pypdf 原因&#xff1a;Python Version Support Python 3.11 3.10 3.9 3.8 3.7 3.6 2.7 pypdf>3.0 YES YES YES YES YES YES PyPDF2>2.0 YES YES YES YES YES YES PyPDF2 1.20.0 - 1.28.4 YES YES YES YES YES YES P…

1、【开始】【简介】Qlib:量化平台

【简介】1、Qlib:量化平台 简介框架简介 Qlib是一个面向AI的量化投资平台,旨在实现AI技术在量化投资中的潜力,赋能研究,并创造价值。 通过Qlib,用户可以轻松利用他们的想法来创建更好的量化投资策略。 框架 在模块层,Qlib 是由上述组件组成的平台。这些组件被设计为低耦…

Flutter笔记:关于应用程序中提交图片作为头像

Flutter笔记 关于应用程序中提交图片作为头像 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133418554…

多目标平衡黏菌算法(MOEOSMA)求解八个现实世界受约束的工程问题

目录 1 受约束的工程问题 1.1 减速器设计问题(Speed reducer design problem) 1.2 弹簧设计问题(Spring design problem) 1.3 静压推力轴承设计问题(Hydrostatic thrust bearing design problem) 1.4 振动平台设计问题(Vibrating platform design problem) 1.5 汽车侧面碰…

HTML——列表,表格,表单内容的讲解

文章目录 一、列表1.1无序&#xff08;unorder&#xff09;列表1.2 有序&#xff08;order&#xff09;列表1.3 定义列表 二、表格**2.1 基本的表格标签2.2 演示 三、表单3.1 form元素3.2 input元素3.2.1 单选按钮 3.3 selcet元素 基础部分点击&#xff1a; web基础 一、列表 …