Spring学习day02-通过全注解模式实现CRUD
前言
1.为什么要学习纯注解开发?
2.纯注解开发的优势?
3.使用纯注解开发达到的目标
4.实现纯注解开发的步骤
一、纯注解开发
1.为什么要学习纯注解开发?
因为后续将要学习的SpringBoot框架是使用纯注解开发,完全舍弃XML配置,所以我们学习Spring的纯注解开发主要是为了给SpringBoot打基础
2、纯注解开发的优势?
减少了很多复杂、冗余的配置
3.纯注解开发达到的目标
舍弃XML配置文件
二、纯注解开发的实现
1.创建一个配置类用来代替配置文件
1.1 AtguiguSpringConfiguration.java
package com.atguigu.config;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;import javax.sql.DataSource;/*** @author HW* @description: TODO* @date 2022/11/11 20:09* @Configuration 将一个普通类标记为Spring的配置类* @ComponentScan("com.atguigu") 基本扫描* @PropertySource 用来引入外部的properties文件* @Bean 用来将方法的返回值放到IOC容器中*/
@Configuration
@ComponentScan("com.atguigu")
@PropertySource("classpath:jdbc.properties")
public class AtguiguSpringConfiguration {@Value("${dataSource.username}")private String username;@Value("${dataSource.password}")private String password;@Value("${dataSource.url}")private String url;@Value("${dataSource.driver}")private String driverClassName;@Beanpublic DataSource createDataSource(){DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setUsername(username);druidDataSource.setPassword(password);druidDataSource.setUrl(url);druidDataSource.setDriverClassName(driverClassName);return druidDataSource;}@Beanpublic QueryRunner creatQueryRunner(DataSource dataSource){return new QueryRunner(dataSource);}}
Configuration注解: 添加在配置类上,用于标记这个类是配置类
ComponentScan注解:添加在配置类上,用来指定包扫描
PropertySource注解: 添加在配置类上,用来引入外部的properties文件
Value注解:用来注入简单类型的数据
Bean注解:添加在方法上,用来将方法的返回值放到IOC容器
2. 依赖注入的相关注解
2.1 使用Autowired注解进行注入
Autowried注解:
它是Spring框架中的注解
它的使用位置:构造器、方法、方法参数、成员变量(包含枚举常量)、注解类型
底层作用原理(自动专配时的流程):如图
2.2 使用Resource注解进行注入
@Resource注解默认是byName 方式,提升项目的可扩展性,可插拔性
它是JDK中的注解
它的使用位置:类、接口、注解、枚举、成员变量(包含枚举常量)、方法
底层作用原理(自动装配的流程)
① type和name属性都有值:
它首先会byName(根据属性名去匹配对象),匹配到对象之后再匹配type
② type属性有值但是name属性没有值:
它首先会byName(根据属性名去匹配对象),匹配到对象之后再匹配type
③ name属性有值但是type属性没值:
他首先会byName(根据name属性的值去匹配)
④ name属性和type属性都没有值:
它首先会byName(根据属性名去匹配对象),根据name匹配上之后再去匹配type
特殊情况: 如果IOC容器中有且仅有一个要注入的类型的对象,它byName匹配不上的时候才会byType
2.3 使用Qualifier注解进行注入
@Qualifier注解:它必须得配合@Autowired一起使用,用来指定根据name进行依赖注入
package com.atguigu.ioc.component;
import org.springframework.stereotype.Controller;
@Controller
public class SoldierController {@Resourceprivate SoldierService soldierService;public void getMessage() {soldierService.getMessage();}
}
2.4 Autowried注解和Resource注解的区别
@Autowried功能虽说非常强大,但是也有不足之处.比如:他跟Spring强耦合,如果换成其他框架,功能就会失效,而@Resource是JDK提供的,他是Java标准,绝大部分框架都支持
除此之外,有些场景使用@Autowired无法满足的要求,改成@Resource却能解决问题
Autowried | Resource |
默认按照byType自动装配 | 默认byName装配 |
只包含一个参数:required 表示是否开启自动注入,默认是true | 包含七个参数,最重要的两个参数是:name和type |
如果要使用byName,需要使用@Qualifier一起配合 | 如果指定了name,则用byName自动装配,如果指定了byType,则用byType自动装配 |
能够用在:构造器、方法、参数、成员变量和注解上 | 能够用在:类、成员变量和方法上 |
spring定义的注解 | 是jdk定义的注解 |
c
三、Spring整合junit4
1.Spring整合Junit4的好处
1.1 为什么要使用Spring整合单元测试?
为了简化、方便单元测试在Spring项目中的使用
1.2 使用Spring整合单元测试之后要达到的目标
1.不需要使用者自己创建IOC容器,Junit框架自动帮我们创建
2.不需要我们自己通过IOC容器getBean()方法获取对象,由IOC容器将对象注入给单元测试类使用
2.具体操作
2.1 引入spring和junit整合的依赖
<!--引入Spring整合Junit的依赖-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.1</version><scope>test</scope>
</dependency>
spring5整合junit只支持junit4.12以上版本
2.2 配置
package com.atguigu;import com.atguigu.config.AtguiguSpringConfiguration;
import com.atguigu.controller.SoldierController;
import com.atguigu.pojo.Soldier;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.sql.SQLException;/*** @author HW* @description: TODO* @date 2022/11/11 15:16*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AtguiguSpringConfiguration.class)
public class IocTest {@Autowiredprivate SoldierController soldierController;@Testpublic void TestFindAll() throws SQLException {ApplicationContext act = new AnnotationConfigApplicationContext("com.atguigu");SoldierController soldierController = act.getBean(SoldierController.class);soldierController.findAll();}@Testpublic void TestAdd() throws SQLException {Soldier soldier = new Soldier();soldier.setSoldierName("皎月");soldier.setSoldierWeapon("月刀");soldierController.save(soldier);}}
在单元测试类上添加@Runwith(SpringJUnit4ClassRunner.class)
在单元测试类上添加@ContextConfiguration(location="要加载的配置文件的路径")
Spring学习day02-通过全注解模式实现CRUD相关推荐
- Spring学习笔记4,注解方式管理Bean
Spring框架的Bean管理注解方式的快速入门 1. 步骤一:下载Spring框架的开发包 解压后的目录结构如下 * docs – API和开发规范 * libs – jar包和源码 Sp ...
- 工作之旅_松下伺服驱动器学习篇_全闭环控制模式(第五天)
1.全闭环控制模式初期要设置的参数 2.电子齿轮比:3.脉冲再生功能 4.使用外部传感器的类型 5.设置电机编码器分辨率与外部位移传感器分辨率的分倍频比
- spring学习笔记05-IOC常用注解(二)
文章目录 2.3 关于 Spring 注解和 XML 的选择问题 2.4spring 管理对象细节 2.5spring 的纯注解配置 2.5.1 待改造的问题 2.5.2 新注解说明 2.5.2.1 ...
- spring学习笔记04-IOC常用注解(一)
文章目录 2.3常用注解 2.3.1 用于创建对象的 2.3.1.1 @Component 2.3.1.2 @Controller @Service @Repository 2.3.2 用于注入数据的 ...
- spring+hibernate+Struts2 整合(全注解及注意事项)
最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar ...
- spring boot(7)-mybatis全注解化
关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml [html] view plaincopyprint? <!-- 引入mybatis --> <depend ...
- springmvc中的全注解模式
1.贴在类上: @Controller表明其是一个控制器 2.贴在方法上: @requestMapping("/xxx"): 标明请求要访问的方法的资源路径,,需以/打头.其中省略 ...
- spring-102-spring全注解快速实现事务
之前使用jdbc操作数据库,并使用事务的时候是这样操作: Connection connection = null;try {//connection = getConnection(....);// ...
- JavaEE——Spring学习笔记01【Ioc开发的模式】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
最新文章
- 在批处理中调用JS操作MongoDB
- 用于文本识别的合成数据生成器
- ML之回归预测:利用九大类机器学习算法对无人驾驶汽车系统参数(2018年的data,18+2)进行回归预测值VS真实值
- 基于Jenkins的持续交付全流程设计与实践
- Java常见GC算法_垃圾收集器及内存分配_G1垃圾收集器
- 系统设计:github上学习如何设计大型系统的项目
- 企业微信添加机器人播报天气
- 网络粘包解包问题杂谈
- 在Linux下轻松搭建自己的DNS服务器
- idea打包servlet成war包部署在tomcat
- 【PowerBuilder 9.0 使用时第一次遇到的错误 c0031】
- pi启动configtool
- java分词支持拼音_支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
- 设计模式——工厂方法模式
- Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
- vb 复制 剪贴板 html,VB.NET中调用系统的剪贴板完成数据的复制和粘贴
- 相片打印机原理_手机照片打印机的原理是什么 便携式照片打印机到底好不好...
- 嫁了这么有本事的程序员,凭什么不珍惜?|葡萄语录
- 事务处理 :本地 、全局、分布式
- 我去扒了杜蕾斯的微博