前言

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相关推荐

  1. Spring学习笔记4,注解方式管理Bean

    Spring框架的Bean管理注解方式的快速入门 1. 步骤一:下载Spring框架的开发包 解压后的目录结构如下 * docs – API和开发规范 * libs – jar包和源码      Sp ...

  2. 工作之旅_松下伺服驱动器学习篇_全闭环控制模式(第五天)

    1.全闭环控制模式初期要设置的参数 2.电子齿轮比:3.脉冲再生功能 4.使用外部传感器的类型 5.设置电机编码器分辨率与外部位移传感器分辨率的分倍频比

  3. spring学习笔记05-IOC常用注解(二)

    文章目录 2.3 关于 Spring 注解和 XML 的选择问题 2.4spring 管理对象细节 2.5spring 的纯注解配置 2.5.1 待改造的问题 2.5.2 新注解说明 2.5.2.1 ...

  4. spring学习笔记04-IOC常用注解(一)

    文章目录 2.3常用注解 2.3.1 用于创建对象的 2.3.1.1 @Component 2.3.1.2 @Controller @Service @Repository 2.3.2 用于注入数据的 ...

  5. spring+hibernate+Struts2 整合(全注解及注意事项)

    最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar ...

  6. spring boot(7)-mybatis全注解化

    关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml [html] view plaincopyprint? <!-- 引入mybatis --> <depend ...

  7. springmvc中的全注解模式

    1.贴在类上: @Controller表明其是一个控制器 2.贴在方法上: @requestMapping("/xxx"): 标明请求要访问的方法的资源路径,,需以/打头.其中省略 ...

  8. spring-102-spring全注解快速实现事务

    之前使用jdbc操作数据库,并使用事务的时候是这样操作: Connection connection = null;try {//connection = getConnection(....);// ...

  9. JavaEE——Spring学习笔记01【Ioc开发的模式】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

最新文章

  1. 在批处理中调用JS操作MongoDB
  2. 用于文本识别的合成数据生成器
  3. ML之回归预测:利用九大类机器学习算法对无人驾驶汽车系统参数(2018年的data,18+2)进行回归预测值VS真实值
  4. 基于Jenkins的持续交付全流程设计与实践
  5. Java常见GC算法_垃圾收集器及内存分配_G1垃圾收集器
  6. 系统设计:github上学习如何设计大型系统的项目
  7. 企业微信添加机器人播报天气
  8. 网络粘包解包问题杂谈
  9. 在Linux下轻松搭建自己的DNS服务器
  10. idea打包servlet成war包部署在tomcat
  11. 【PowerBuilder 9.0 使用时第一次遇到的错误 c0031】
  12. pi启动configtool
  13. java分词支持拼音_支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
  14. 设计模式——工厂方法模式
  15. Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
  16. vb 复制 剪贴板 html,VB.NET中调用系统的剪贴板完成数据的复制和粘贴
  17. 相片打印机原理_手机照片打印机的原理是什么 便携式照片打印机到底好不好...
  18. 嫁了这么有本事的程序员,凭什么不珍惜?|葡萄语录
  19. 事务处理 :本地 、全局、分布式
  20. 我去扒了杜蕾斯的微博

热门文章

  1. 气象与公共服务监测分析服务系统(MAS)-深圳市千百炼科技有限公司
  2. Halcon绘制矩形
  3. [C++] 使用 cryptopp 加密解密
  4. 开机后黑屏看不到桌面_电脑开机后桌面黑屏不显示怎么办【解决方法】
  5. 牧牛商学院,区块链的创新应用和发展
  6. AI智能语音机器人系统介绍
  7. 夸奖php工程师,关于程序猿的经典笑话
  8. 资产配置那些事-信用卡
  9. 设计灵感|APP注册登录页面的设计形式
  10. SQL表中存储计算公式,直接执行