spring day1023

ok了家人们,今天继续学习spring框架,

.Spring的注解开发

在开发中,配置文件中 Bean 标签会非常多,难以维护。怎么
办?
使用注解的形式替代 xml 配置,可以将一些繁杂的 spring 配置
从工程中消除掉,简化书写。
注解配置和基于 XML 配置内容含义是一模一样,可以互相置
换。
实际开发中,到底用 xml 还是注解,各有优劣,所以这两种
配置方式我们都需要掌握。尤其是注解,在未来的
SpringBoot 中有很重要的应用。现在需要好好掌握

7.1 xml半注解开发

7.1.1 启用注解功能
  • 启动注解扫描
<context:component-scan basepackage="packageName"/>
  • 说明:
        在进行包所扫描时,会对配置的包及其子包中所有java
        文件进行扫描
        扫描结束后会将可识别的有效注解转化为spring 对应的
        资源加入IoC 容器
  • 示例
<context:component-scan base-package="com.cjx"/>

7.1.2 Bean的定义(@Component)

  • 名称: @Component @Controller @Service
    @Repository
  • 类型:类注解
  • 位置:类定义上方
  • 作用:设置该类为spring管理的bean
  • 示例:
//@Component
@Service
public class UserServiceImpl implements
UserService{
@Override
public void save() {
System.out.println("service...add...");
}
}
  • 说明:
    • @Controller@Service @Repository
    • @Component的衍生注解,功能同@Component
    • @Controller 用于Controller层的类 :表现层
    • @Service 用于Service层的类: 业务层
    • @Repository 用于Dao层的类: 持久层(一般不写)
  • 相关属性: value (默认),定义 bean 的访问 id 。默认的 id
    名称为 " 简单类名,首字母小写 "
    • 使用 value 属性指定 bean id
@Service(value = "userService")
public class UserServiceImpl implements
UserService{
@Override
public void save() {
System.out.println("service...add...");
}
}

 

  • 当注解中只设置一个属性时,value属性的属性名可以省略:
@Service("userService")
public class UserServiceImpl implements
UserService{
@Override
public void save() {
System.out.println("service...add...");
}
}
注意:
7.1.3 注入Bean(@Autowired)
  • 注解的方式注入bean,不需要setter方法
  • 名称:@Autowired@Qualifier@Resource
  • 类型:属性注解、方法注解(了解即可)
  • 位置:可以用在属性上和set方法上, 如果写在属性上,可
  • 以没有set方法
  • 作用:自动装配,设置属性的对象或对方法进行传参(从
  • IOC容器查找对象, 给属性赋值)
  • 示例:
@Service
public class UserServiceImpl implements
UserService{
@Autowired
private UserDao userDao;
@Override
public void save() {
System.out.println("service...add...");
}
}
  • 说明:
    • @Autowired 按类型装配,一般生产中都使用它 ,
      spring 提供的,只有引入 spring 依赖才可使用。
    • @Qualifier 可以指定bean的id,一般用于有多个同一
      类型 bean 的场景 ( 必须配合 @Autowired 使用 )
    • @Resource 相当于同时指定了@Autowired和
      @Qualifier ,由 Jdk 提供的,了解即可。
@Service
public class UserServiceImpl implements
UserService{
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Override
public void save() {
System.out.println("service...add...");
}
}
  •  相关属性
    • @Autowired
      • required:定义该属性是否允许为null,默认true
    • @Qualifier
      • value:需要注入的beanid
    • @Resource
      • name :需要注入的 bean id
7.1.4 其他注解(了解即可)
  • @Primary 类注解(也可以用于方法上,配合@Bean使用),设置bean的优先级
    • @Autowired 默认按类型装配,当出现相同类型的
      bean ,使用 @Primary 提高按类型自动装配的优先级,
      程序就不会报错了。
@Primary
@Component
public class ClassName{}
  • @Scope 类注解,设置该类作为bean对应的scope属性
    • 相当于标签的scope属性
// 默认为singleton
@Scope("prototype")
public class ClassName{}

7.2 Spring纯注解开发

spring 零配置也就是使用注解完全替代 xml 配置文件。
零配置 xml 就不要了,那么有谁来进行 xml 的替代 ? 如何实
现?
替代 xml 中相关标签的注解是什么?怎么使用?
既然没有 xml 了,还得创建一个 用来解析注解的容器对象,如
何创建?
7.2.1 零配置IOC容器
加载纯注解格式上下文对象,需要使用AnnotationConfigApplicationContext
// SpringConfig是一个配置类(有@Configuration注解)
ApplicationContext ctx = new
AnnotationConfigApplicationContext(SpringConfig.
class);
7.2.2 @Configuration注解
  • 类型:类注解
  • 作用:作用等同于 xml 配置文件,当前注解声明的类中,编
    写配置信息,所以我们把 使用 @Configuration 的类称之
    为配置类
  • 实例
//标注当前类是配置类,替代applicationContext.xml
@Configuration
public class MyConfiguration {
}
 7.2.3 @ComponentScan注解
  • 类型:类注解
  • 作用:扫描注解,此注解只能添加一次,多个数据请用数组格式
  • 实例
@Configuration
@ComponentScan({"com.lzw"})
//@ComponentScan({"com.lzw.service","com.lzw.dao
"})
public class SpringConfig {……}
  • 相当于XML配置文件中的context:component-scan标签
<context:component-scan base-package="com.lzw"/>
  •  注意:扫描的包路径不写,扫描当前包及其子包!

7.3 Spring整合Druid

7.3.1 @Bean注解
  • 类型:方法注解
  • 作用:将方法的返回值存储到Spring IOC容器中
  • 实例
//第三方jar包的类,添加到ioc容器,无法使用
@Component等相关注解!
//bean的id可以指定,默认是方法名
@Bean("dataSource")
public DruidDataSource createDataSource(){
//创建数据源对象并返回
DruidDataSource druidDataSource = new
DruidDataSource();
druidDataSource.setDriverClassName(driverClassN
ame);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
  • 相当于XML配置文件中的标签
<bean id="userService"
class="com.lzw.service.UserServiceImpl"></bean>
7.3.2 @Value注解
  • 类型:属性注解、方法注解(了解)
  • 作用:注入非引用类型,设置属性的值或对方法进行传参
  • 范例:
@Value("${jdbc.driver}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
  • 说明:
    • @value 一般用于读取 properties 文件中的属性值
    • 注解的方式注入非引用类型,不需要 setter 方法
  • 相关属性
    • value (默认):定义对应的属性值或参数值
7.3.3 @Import注解
  • 类型:类注解
  • 作用:导入其他配置类(对象)
  • 范例
//RedisConfig是另外一个配置类
@Import({RedisConfig.class})
public class SpringConfig{
}
  •  相当于XML配置文件中的标签
<import resource="classpath:applicationContext-dao.xml"/>
7.3.4 @PropertySource注解
  • 位置:标记在类上
  • 注解作用:引入外部属性文件 (jdbc.properties) ,加载多文
    件请使用数组格式配置
  • 实例:
//@PropertySource({"classpath:application.properties","classpath:jdbc.properties"})
@PropertySource({"classpath:db.properties"})
public class JdbcConfig {
}

 

  • 相当于XML配置文件中的context:property-placeholder标签
<context:property-placeholder location="classpath:db.properties"/>

7.4 Spring整合JUnit

7.4.1 Spring整合junit的好处
  • 好处一:配置完之后,不需要我们手动创建 Spring 的容
    器,容器由 Junit 帮我们自动初始化
  • 好处二:可以在 junit 测试类中使用 @AutoWired 等方式注
    入对象,直接对其进行调用测试
7.4.2 整合实现步骤
  • 导入依赖坐标
  • 在测试类上加入@RunWith注解,指定Spring的运行器
  • 配置初始化Spring容器的配置文件(配置类)
  • 删除原有的初始化代码ClassPathXmlApplicationContext
  • 注入Bean,执行测试代码
  • 导入依赖坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
注意: junit 的依赖至少要是 4.12 版本 , 可以是 4.13 等版本 , 否则
会出现异常
  • 代码实现
//在测试类上加入@RunWith注解,指定Spring的运行器
@RunWith(SpringJUnit4ClassRunner.class)
//配置初始化Spring容器的配置文件(配置类)
@ContextConfiguration(classes =
{SpringConfig.class}) //加载配置类
业务层代码
//@ContextConfiguration(locations=
{"classpath:applicationContext.xml"})//加载配置文
件
public class DemoTest {
@Autowired
private UserService userService;
@Test
public void test01(){
userService.save();
}
}

7.5 参考代码

  • 业务层代码
public interface UserService {
public void save();
}
@Service
public class UserServiceImpl implements
UserService{
@Autowired
private UserDao userDao;@Override
public void save() {
System.out.println("service...add...");
userDao.save();
}
}
  • DAO层代码
public interface UserDao {
public void save();
}
@Repository
public class UserDaoImpl implements UserDao{
@Override
public void save() {
System.out.println("dao...save...");
}
}
  • 配置类
@Configuration
@ComponentScan({"com.lzw"})
@Import({JdbcConfig.class})
public class SpringConfig {
}
@PropertySource({"classpath:db.properties"})
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
// 如何完成把德鲁伊对象交给spring管理
@Bean
public DruidDataSource createDataSource(){
//创建数据源对象并返回
DruidDataSource druidDataSource = new
DruidDataSource();
druidDataSource.setDriverClassName(driverClassNa
me);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
}
  • 测试
//在测试类上加入@RunWith注解,指定Spring的运行器
@RunWith(SpringJUnit4ClassRunner.class)
//配置初始化Spring容器的配置文件(配置类)
@ContextConfiguration(classes =
{SpringConfig.class}) //加载配置类
//@ContextConfiguration(locations=
{"classpath:applicationContext.xml"})//加载配置文件
public class DemoTest {
@Autowired
private UserService userService;
@Autowired
private DataSource dataSource;
@Test
public void test01(){
userService.save();
System.out.println(dataSource);
}
}

ok啊,明天见,特别是你吴彦祖

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

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

相关文章

业余时间试一试利用AI 人工智能赚钱

内容创作与写作&#xff1a; 撰写文章&#xff1a;许多网站、博客和企业都需要大量的优质内容。利用 AI 工具如 ChatGPT 等&#xff0c;获取文章的思路、框架甚至初稿&#xff0c;然后根据自己的知识和经验进行修改、润色和完善。你可以在一些自由撰稿人平台、内容创作平台上承…

智能园艺:Spring Boot植物健康系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

es索引库操作和使用RestHignLevelClient客户端操作es

目录 es索引库操作 mapping映射操作 索引库的CURD操作 1.创建索引库和映射 ​编辑 2.查询索引库 3.删除索引库 4.修改索引库 5.总结 文档的CURD操作 1.新增文档 2.查询文档 3.删除文档 4.修改文档 全量修改 增量修改 5.总结 RestAPI 使用API例子 需要的数…

一文掌握异步web框架FastAPI(五)-- 中间件(测试环境、访问速率限制、请求体解析、自定义认证、重试机制、请求频率统计、路径重写)

接上篇:一文掌握异步web框架FastAPI(四)-CSDN博客 目录 七、中间件 15、测试环境中间件 16、访问速率限制中间件,即限制每个IP特定时间内的请求数(基于内存,生产上要使用数据库) 1)限制单ip访问速率 2)增加限制单ip并发(跟上面的一样,也是限制每个IP特定时间内的请…

大模型算法二次开发,基本思路详细拆解

[ 导读 随着众多大模型相继问世&#xff0c;大模型二次开发、大模型微调成为一项热门技术。本文为大家总结了大模型二次开发的基本方法与思路&#xff0c;希望对大家有所帮助。 开发方法分类 1、领域知识注入&#xff1a;Continue PreTraining(增量预训练),一般垂直大模型是…

(STM32笔记)十二、DMA的基础知识与用法

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 DMA的基础知识与用法 一、DMA功能框图1、DMA请求2、通道3、仲裁器 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器…

Lua环境安装

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 Lua是一种轻量级、小巧且易于嵌入应用程序的脚本语言&#xff0c;广泛用于游戏开发、Web开发、自动化脚本等领域。本文将详细介绍如何在不同操作系统上安装L…

蓝桥杯注意事项

蓝桥杯注意事项 比赛注意事项 能暴力枚举就暴力枚举&#xff0c;能用简单的思路做就尽量用简单的思路做。认真审核题目的题意和输入输出的要求&#xff0c;避免因为误解题意而导致题目错误。对于提供多组测试样例或者需要对一个过程重复进行循环的代码&#xff0c;要时刻记住…

六大设计原则之一——单一职责原则

单一职责原则 面向对象三大特性之一的 封装 指的就是将单一事物抽象出来组合成一个类&#xff0c;所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的 单一职责原则(Single Responsibility Principle - SRP)&#xff0c;就是对一个类而…

autMan奥特曼机器人-实时翻译的用法

一、基本配置 访问并登录百度翻译开放平台&#xff1a;https://api.fanyi.baidu.com/ 进入开发者信息获取 APP ID和密钥&#xff0c;并开通“通用文本翻译”服务 autMan应用市场->我的->找到“实时翻译”插件安装后去点击“配参” 二、使用示例 假如你和一个俄国人聊…

C程序设计语言精髓 单向链表

目录 单向链表---定义 单向链表---建立 单向链表---删除 单向链表---插入​ 单向链表---输出​ 单向链表---定义 单向链表---建立 单向链表---删除 单向链表---插入 单向链表---输出

Visual Studio安装图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE&#xff0c;可用于创…

【通俗理解】Neurosymbolic AI——融合神经网络与符号推理的智慧之力

【通俗理解】Neurosymbolic AI——融合神经网络与符号推理的智慧之力 关键词提炼 #Neurosymbolic AI #神经网络 #符号推理 #感知能力 #逻辑能力 #认知水平 #智慧与力量 第一节&#xff1a;Neurosymbolic AI的类比与核心概念 Neurosymbolic AI就像是给神经网络这位“大力士”…

神策数据客户旅程 GPT:以 AI 驱动客户旅程及埋点落地

数据驱动时代&#xff0c;随着 AI 在数据处理及分析方面的能力日渐强大&#xff0c;将二者结合&#xff0c;可以帮助企业效能提升&#xff0c;获取更多商业价值。 我们在 AI 大模型探索过程中发现&#xff0c;产品经理、技术人员、市场营销人员以及需要数据驱动决策的团队&…

基于opencv的人脸闭眼识别疲劳监测

1. 项目简介 本项目旨在实现基于眼部特征的眨眼检测&#xff0c;通过监测眼睛开闭状态来计算眨眼次数&#xff0c;从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法&#xff0c;以及眼部特征比率&#xff08;EAR, Eye Aspect Ratio&#xff09;来判断眼睛的闭…

可观测日北京|观测云:可观测性需要做到“三个一”

2024年10月&#xff0c;备受期待的中国可观测日「北京站」圆满落幕。本次活动汇聚了来自云计算、技术创新等领域的专家&#xff0c;探讨了探讨了可观测性在云计算和数字化转型中扮演的角色。观测云也在活动展示了作为可观测性行业领袖的技术力和创新力。 观测云技术亮点&#…

python画图|坐标轴显隐设置

【1】引言 前序学习中&#xff0c;已经发现坐标轴的显示具有至关重要的影响&#xff0c;因此今天继续探索相关技巧&#xff1a;坐标轴显隐设置。 前序学习内容可通过下述链接直达&#xff1a; python画图| 对齐图名和标签-CSDN博客 【2】官网教程 点击下方链接可以直达官网…

react 基础学习笔记

1.react 语法 ①数据渲染 函数组件将HTML结构直接写在函数的返回值中 JSX只能有一个根元素 JSX插值写法 插值可以使用的位置 1.标签内容&#xff1b; 2.标签属性 JSX 条件渲染&#xff1a;三目运算符&#xff1b; JSX根据数据进行列表渲染&#xff1a;map()方法&#x…

【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程

第二章从协议栈这部分来看网络中的通信如何实现&#xff0c;准备从两部分来进行分解。本篇是第一部分&#xff1a;详细介绍TCP协议栈收发数据的过程。 首先来看下面的图。从应用程序到网卡需要经过如下几部分&#xff0c;上面的部分通过委托下面的部分来完成工作。首先是应用程…

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉&#xff1a;https://microsoftgraveyard.com/&#xff0c;这里静静的躺着很多微软技术和产品。近日&#xff0c;微软又在准备一场新的“告别仪式”了&#xff0c;这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…