Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试

Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试

  • 1.Spring5框架概述
  • 2.IOC实现(将类交由Spring管理)
    • 2.1.IOC容器介绍
    • 2.2.引入依赖(spring-context)
    • 2.3.声明注解(@Service、@Component、@Repository、@Controller)
    • 2.4.依赖注入(@Autowired、@Qualifier)
    • 2.5.声明 Bean 实例(@Bean、@Configuration)
    • 2.6.包扫描,注解生效(@ComponentScan)
  • 3.单元测试
    • 3.1.引入依赖
    • 3.2.测试注入情况
  • 4.完整源码
  • 《目录:Spring5-完全注解开发》
  • 《目录:从零手写Tomcat》
  • 《幕》

1.Spring5框架概述

  • Spring是一个开源框架、是一个轻量级容器

  • 特点

    • Spring 框架方便组合其他技术,是Java生态的重要支撑者
    • 管理Bean的生命周期,支持依赖注入,简化开发
    • 支持面向切面编程 ,进一步解耦
    • 方便和其他框架进行整合,如:内置整合 junit , 方便程序测试;支持 MyBatis 等数据库操作框架
    • 支持 声明式事务 和 编程式事务
    • 极大程度,降低后台服务开发的代码量 和 开发难度
    • 新推出,基于 NIO 的 webflux,反人类编程(不推荐使用)
    • webflux,基于NIO异步非阻塞模式,提高吞吐量可以理解。但是不应该变动编程思路
  • Spring 框架是模块化的,存在 20 多个不同的模块
    • 核心模块: context、core (IOC)、AOP、ORM、DAO、web、web mvc、tx
    • 一些模块是相互依赖的。例如 spring-context 依赖于 spring-beans,而 spring-beans 又依赖于 spring-core。
spring-aop      spring-context-indexer  spring-instrument  spring-orm    spring-web
spring-aspects  spring-context-support  spring-jcl         spring-oxm    spring-webflux
spring-beans    spring-core             spring-jdbc        spring-r2dbc  spring-webmvc
spring-context  spring-expression       spring-jms         spring-test   spring-websocket
spring-tx  		spring-messaging   

2.IOC实现(将类交由Spring管理)

2.1.IOC容器介绍

  • 控制反转 (IoC) , 也称为依赖注入 (DI)。这是一个过程.
    对象 通过构造函数参数、工厂方法的参数 或 在对象实例被构造 或 从工厂方法返回后, 设置的属性来定义它们的依赖关系(即与它们一起工作的其他对象)
  • 然后容器在创建 bean 时注入这些依赖项。
  • 这个过程基本上是 bean 本身通过使用类的直接构造 或 诸如服务定位器模式之类的机制,,来控制其依赖关系的实例化或位置的逆过程,(因此称为控制反转)。
  • IOC 容器依赖: org.springframework.beansorg.springframework.context
  • Spring IoC 容器:就是 org.springframework.context.ApplicationContext 接口,负责实例化、配置和组装 bean。
  • 容器通过读取配置信息(XML、Java 注释或 Java 代码),配置和组装对象间的创建和依赖关系。
  • BeanFactory 接口提供了一种高级配置机制,能够管理任何类型的对象。 ApplicationContext 是 的子接口BeanFactory
  • BeanFactory提供了配置框架和基本功能,并ApplicationContext增加了更多的企业特定功能。BeanFactoryApplicationContext完整超集

2.2.引入依赖(spring-context)

  • spring-context (core、bean、aop、jcl、expression)
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-contextartifactId>
           <version>5.3.16version>
       dependency>

Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第1张图片

2.3.声明注解(@Service、@Component、@Repository、@Controller)

  • Spring 提供了4个注解,用于标识将类交由Spring管理
  • 但是四个注解的最终实现结果是一致的,只是官方定义了各自的使用场景
  • @Service:将当前类认为是一个服务类,并交由Spring管理。
  • @Component:将当前类认为是一个组件类,并交由Spring管理。
  • @Repository:将当前类认为是一个数据类,并交由Spring管理。
  • @Controller:将当前类认为是一个控制器类,并交由Spring管理。
  • 如图:UserController类 和 UserService,理论上可以使用4个注解中的任意一种
  • 但是为了规范,还是分别使用 @Controller 和 @Service ,这样更容易阅读
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第2张图片
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第3张图片

2.4.依赖注入(@Autowired、@Qualifier)

  • 使用 @Autowired、@Qualifier 实现依赖对象自动注入
  • @Autowired:只存在一种类型时,通过类型自动注入
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第4张图片
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第5张图片
  • @Autowired + @Qualifier:一个接口存在多种实现时,注入接口实例对象时要指定名称注入
  • 类,默认名称,采用驼峰命名法,可以通过注解,主动修改名称
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第6张图片
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第7张图片

2.5.声明 Bean 实例(@Bean、@Configuration)

  • @Configuration:声明当前类为,配置类,并交由Spring管理
  • @Bean : 标记在方法上,将返回对象交由Spring管理
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第8张图片

2.6.包扫描,注解生效(@ComponentScan)

  • 想要注解生效,必须在启动类上声明,包扫描路径,默认为当前路径下全部包
  • @ComponentScan :定义扫描位置,默认为当前路径下全部包
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第9张图片

3.单元测试

3.1.引入依赖

  • spring-test、junit5
  	   <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
            <version>5.3.16version>
        dependency>

      <dependency>
      		<groupId>org.junit.jupitergroupId>
      		<artifactId>junit-jupiter-apiartifactId>
            <version>5.5.2version>
      	    <scope>compilescope>
      dependency>

Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第10张图片

3.2.测试注入情况

  • 测试声明与依赖注入
    Spring5-完全注解开发【之】Spring5介绍、实现IOC、单元测试_第11张图片

4.完整源码

  • 点击前往下载(消耗1积分)

《目录:Spring5-完全注解开发》

  • 点击跳转

《目录:从零手写Tomcat》

  • 点击跳转

《幕》

  • 留白 —<老吉>
  • ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀

你可能感兴趣的:(Spring5,注解开发,java)