Java阶段三03

第3章-第3节

一、知识点

将对象放入容器的四种注解和区别、获取对象的注解和区别、常用的一些配置注解

二、目标

  • 掌握创建对象的四个注解和区别

  • 掌握获取对象的注解

  • 掌握@Bean注解的用法

  • 理解@componentScan的作用

  • 理解@Configuration的作用

三、内容分析

  • 重点

    • 掌握创建对象的四个注解和区别

    • 掌握获取对象的注解

    • 理解@componentScan的作用

  • 难点

    • 获取对象的注解

四、内容

1、创建对象的注解

1.1 @Component

作用:用于把当前类的对象存入spring容器中

属性:

value:用于指定bean的id,默认是当前类名,首字母小写

注意点:在xml中配置(配置扫描的路径)

com.mashang-> controller:接口的控制层,controller层关注接口请求方法、路径、传参、响应内容-> entity(model, domain):模型层/实体类-> mapper(dao):数据层,持久层,调用数据库以此来获取数据-> service:逻辑层,是用来执行一些接口的复杂逻辑的地方Javaweb -> 怎么做学生管理系统的?-> servlet层 -> 创建接口,并且执行业务的逻辑,操作数据库,把数据响应给前端-> utils层 工具类 JDBCUtil DateUtil RandomUtil-> entity层 Student Class ClassName-> filter层servlet层-> controller,专注于接口的路径、请求方法、请求参数,响应参数-> mapper,专注于操作数据库-> service,专注于接口的业务逻辑处理查询学生列表getStudentList()前端调用接口 -> controller -> service -> mapper -> service -> controller -> 响应给前端

<context:component-scan base-package="包名"></context:component-scan>
@Component
public class Test{}
1.2 @Controller
@Controller 
public class StudentController{}
1.3 @Service
@Service
public class StudentService{}
1.4 @Repository
@Repository 
public class StudentDao{}
​
public class StudentMapper{}
1.5 区别和注意点
  • 这四个注解是一样的作用,使我们的架构更加清晰
  • 一般我们的实体层不用注入对象
  • @component用于控制层(controller)、持久层(dao)、业务逻辑层(service)之外的类

2、注入对象的注解

2.1 @Autowired

作用:自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。

@Repository
public class ClassDao1 extends ClassDao{}
@Repository
public class ClassDao2 extends ClassDao{}
​
@Autowired
private ClassDao classDao;
​
public void queryAll() {dao.queryAll();System.out.println(classDao);
}
2.2 @Qualifier

作用:在自动按照类型注入的基础上,再按照Bean的id注入。当有多个类型匹配时,使用要注入的对象变量名称作为bean的id,在spring中容器查找,找到了也可以注入成功,找不到就报错。它在给字段注入时不能独立使用,必须和@AutoWired一起使用。

属性:value,指定bean的id

@Autowired
@Qualifier("classDao1")
private ClassDao classDao;
​
public void queryAll() {dao.queryAll();System.out.println(classDao);
}
2.3 @Resource

作用:直接按照Bean的id注入

属性:name,指定Bean的id

以上的注解只能注入其他Bean类型,基本数据类型和String类型无法使用这些注解

@Resource(name = "studentDao1")
StudentDao dao;
2.4 @Value

作用:注入基本的数据类型和String类型

属性:value,用于指定值

@Value("王五")
private String name;
2.5 @Scope

作用:指定Bean的作用范围

属性:value,指定范围的值,取值(singleton prototype request session globalsession)

@Scope("prototype")
2.6 PostConstruct

作用:用于指定初始化方法,加上这个注解后,当对象生成后会自动调用对应的方法

@PostConstruct
public void init(){System.out.println("初始化了");
}

3、其他注解

3.1 @Configuration

作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用

@Configuration // 指定当前类是一个配置类
@ComponentScan("com.company") // 指定要扫描的包
public class SpringConfig {}
​
ApplicationContext ctx =new AnnotationConfigApplicationContext(有@Configuration注解的类.class)
3.2 @ComponentScan

作用:用于指定spring在初始化容器要扫描的包,作用和spring的xml配置文件中<context:component-scan base-package="包名">一样

属性:basePackages:用于指定要扫描的包,和该注解的value属性一样

3.3 @Import

作用:用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解,当然,写上也可以

属性:value,用于指定其他配置类的字节码

// 可以写多个 使用,隔开
@Import(SpringConfig.class,xxx)
public class SpringConfig2 {}
3.4 @PropertySource

作用:用于加载.properties文件中的配置。例如我们配置数据源时,可以把连续数据库信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置

属性:value,用于指定properties文件位置,如果是在类路径下,需要写上classpath

@PropertySource("classpath:配置文件.properties")

获取配置中的值

3.4.1 @Value("$(配置文件中的Key)")
@Component
@PropertySource("classpath:druid.properties")
public class JDBCUtil {@Value("${driverClassName}")private String driverClassName;@Value("${username}")private String username;@Value("${password}")private String password;
​public void getConnection(){System.out.println(driverClassName);System.out.println(username);System.out.println(password);}
}
​
JDBCUtil jdbcUtil = ctx.getBean(JDBCUtil.class);
jdbcUtil.getConnection();

maven导入mysql依赖包

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version>
</dependency>

3.5 @Bean

作用:只能写在方法上,表明此方法创建一个对象,并且放入spring容器中

属性:name,给当前@Bean注解方法创建的对象指定一个名称(即Bean的id)。不写时,默认就是当前方法的名称。

// 这个是用来生成一个Connection对象的
// 我们可以把这个对象放到spring容器里面
@Bean
public Connection getConnection() {System.out.println(driverClassName);System.out.println(username);System.out.println(password);return null;
}
JDBCUtil jdbcUtil = ctx.getBean("方法名");
// 这个时候的Connection对象已经保存在容器中了

4、小结

本章节中我们学习了如何使用注解将对象放入容器中,如何使用注解将对象从容器中取出以及不同取出方式的区别,同时学习了其他在Spring中常用的注解,了解到了注解开发和XML配置的区别和优势,掌握了IOC的两种使用方式。

下一节中,我们将会学习反射和注解的相关知识点,深入探究IOC的两种方式是如何封装实现的,让我们对于框架的底层有更加深入的理解。

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

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

相关文章

基于LabVIEW应用ARINC 429板卡实现数据通讯——(下篇)

五、基于LabVIEW实现数据通讯 基于LabVIEW实现429板卡的数据通讯是调用API 动态链接库文件来实现的。该文件中有许多的板卡操作函数&#xff0c;在调用板卡中必须按照一定的函数调用流程来操作板卡&#xff0c;否则极易出现板卡操作错误。 1、API函数的调用步骤 API函数的调…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时&#xff0c;默认显示“Generate Signed APK”提示信息&#xff0c;如下图所示&#xff1a; 如果在打包时不显示“Generate Signed APK”提示信息&#xff0c;解决办法是&#xff1a; Android Studio菜单栏&#xff0c;“File->Settings->Appearan…

典型的列转行(sparkSQL)

数据 id,username,math,computer,english 1,huangbo,34,58,58 2,xuzheng,45,87,45 3,wangbaoqiang,76,34,89 编写 SQL&#xff0c;将其转换为下面这张表 id,username,course,score 1,huangbo,math,34 1,huangbo,computer,58 1,huangbo,english,58 2,xuzheng,math,45 2,xuzheng,…

42python数据分析numpy基础之trace计算对角线元素的和

python的numpy库的trace()函数&#xff0c;计算对角线元素的和。 用法 numpy.trace(a, offset0, axis10, axis21, dtypeNone, outNone)描述 numpy.trace(a)&#xff0c;返回数组a的对角线元素的和。 入参 a&#xff1a;必选&#xff0c;数组&#xff0c;列表&#xff0c;元…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构&#xff0c;旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段&#xff0c;确保计算机系统在各种攻击和…

深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升

目录 深度测评 ONLYOFFICE 文档 8.2 版本&#xff1a;革新与体验的双重提升引言协作编辑功能的革新PDF 表单签名的创新界面设计的全面提升性能与稳定性的双重优化文档编辑器的新功能电子表格的强大新特性演示文稿的创意增强RTL 支持与本地化的关注更多实用改进用户体验的持续提…

CytoSPACE·单细胞与空间转录组的高精度对齐

CytoSPACE 是一种新型计算工具&#xff0c;用于将单细胞转录组分配到原位空间转录组学 (ST) 数据。该方法通过最短增强路径优化程序最小化基于相关性的成本函数来解决单细胞/点分配问题。 工作流程&#xff1a; 1. 应用现有的ST去卷积方法&#xff08;如Spatial Seurat或RCTD&…

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式&#xff0c;在…

Chrome 130 版本开发者工具(DevTools)更新内容

Chrome 130 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、网络&#xff08;Network&#xff09;面板更新 1. 重新定义网络过滤器 网络面板获新增了一些过滤条件&#xff0c;这些过滤条件是根据反馈重新设计的&#xff0c;特定于类型的过滤条件保持不变&…

扑克牌[CSP-J 2024]

题目传送 可以用map做成一个桶&#xff0c;它的size就是输入的种数&#xff0c;再用52-size就好了。 代码如下&#xff1a; #include<iostream> #include<map> using namespace std; typedef long long ll; int main() {map<string,int> b;int n;cin>&g…

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

文章目录 Spring 是什么什么是容器什么是 IoCIoC 介绍传统程序开发解决方法IoC 程序开发IoC 的优势 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 https://www.captainbed.cn/yechiel 在…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据&#xff0c;从而使CPU去完成更重要的任务&#xff0c;不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。上层划分了4个卷&#xff0c;采用VMFS文件系统&#xff0c;存放虚拟机文件。 服务器存储故障&#xff1a; 存储RAID5阵列中磁盘出现故障&#xff0c;有2块硬盘对应的指示灯亮黄灯…

深度学习之学习率

1 学习率 1.1 学习率的作用 ​ 在机器学习中&#xff0c;监督式学习通过定义一个模型&#xff0c;并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代&#xff0c;并在每一步中最小化成本函数&#xff08;c…

HashMap 源码分析

HashMap 源码分析 1. 前置知识 1.1 什么是 Map 在实际需求中&#xff0c;我们常常会遇到这样的问题&#xff1a;在诸多数据中&#xff0c;通过其编号来寻找某些信息&#xff0c;从而进行查看或修改&#xff0c;例如通过学号查询学生信息。今天我们所介绍的 Map 集合就可以很…

Python毕业设计选题:基于django+vue的4S店客户管理系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 员工信息管理 个人中心 车辆信息管理 售后服务管理 售后安排管理 车辆信…

Vagrant使用教程:创建CentOS 8虚拟机

目录 简介准备工作下载配置Vagrant修改环境变量创建VAGRANT_HOME环境变量修改virturalBox新建虚拟机文件的默认生成路径修改Vagrant配置支持VirtualBox7.1.x版本创建Vagrant文件添加镜像 初始化并开机初始化开发环境开机 其他配置项宿主机的交换目录修改虚拟机内存修改 访问方式…

2024/11/4 数据结构大题打卡

邻接矩阵定义&#xff1a; typedef struct{char vex[N];int weight[N][N];int vexnum,arcnum; }MGraph; 邻接链表定义&#xff1a; #difine N 8typedef struct ArcNode{int vexIndex;int weight;struct ArcNode *next; }ArcNode; typedef struct VNode{char data;ArcNode *…

能详细的说明单片机的原理及其设计方法吗?如何快速的学会单片机这门技术?

单片机&#xff08;Microcontroller Unit&#xff0c;简称 MCU&#xff09;是一种将中央处理器&#xff08;CPU&#xff09;、存储器、输入输出接口等集成在一块芯片上的微型计算机系统。 **单片机的工作原理**&#xff1a; 单片机通过内部的时钟信号来同步各个部件的工作。程…

第一篇 硬件篇1[学习-来自 正点原子]

在电路设计中&#xff0c;TVS&#xff08;瞬态电压抑制器&#xff09;是一种有效的保护元件&#xff0c;可以用来防止瞬时过电压对芯片和其他敏感器件造成损坏。 STM32F103RCT6作为MCU 一键下载电路的具体实现过程&#xff1a; 首先&#xff0c; mcuisp控制 DTR输出低电平&…