Spring第二天Spring基于注解的IOC以及IOC的案例

文章目录

    • 注入数据的注解,也就是注入成员变量的注解,将成员变量注入到spring容器中,这个成员变量也是一个接口类型,注入的是这个接口的实现类对象![在这里插入图片描述](https://img-blog.csdnimg.cn/2020062216034420.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzUwNzg1,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200622160302205.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzUwNzg1,size_16,color_FFFFFF,t_70)
  • 基于XML的IOC案例
    • Spring的新注解@Configuration 和 @ComponentScan
    • Spring的新注解 PropertySource
  • Spring整合junit问题分析

Spring第二天Spring基于注解的IOC以及IOC的案例_第1张图片

基于注解的配置和基于XML的配置,目的都是一样的,都是为了降低程序的耦合性,只是形式不一样而已,基于注解的IOC配置比XML要简单许多

我们将注解分为4类
1、创建对象的
2、注入数据的
3、改变作用范围的
4、和生命周期相关的
Spring第二天Spring基于注解的IOC以及IOC的案例_第2张图片
刚开始我们的xml文件时空的
Spring第二天Spring基于注解的IOC以及IOC的案例_第3张图片
当我们运行程序的时候,程序报错了

因为程序并不知道注解在哪个地方,所以这时候在xml中就要配置了,之前的xml是这样
Spring第二天Spring基于注解的IOC以及IOC的案例_第4张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第5张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第6张图片

注入数据的注解,也就是注入成员变量的注解,将成员变量注入到spring容器中,这个成员变量也是一个接口类型,注入的是这个接口的实现类对象Spring第二天Spring基于注解的IOC以及IOC的案例_第7张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第8张图片

Spring第二天Spring基于注解的IOC以及IOC的案例_第9张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第10张图片
用两个注解实在是太麻烦了,这里可以用一个注解@Resource
Spring第二天Spring基于注解的IOC以及IOC的案例_第11张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第12张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第13张图片

改变作用范围的注解
Spring第二天Spring基于注解的IOC以及IOC的案例_第14张图片
改为多例模式之后,打印的就是false了

基于XML的IOC案例

先导入坐标
Spring第二天Spring基于注解的IOC以及IOC的案例_第15张图片
建表
Spring第二天Spring基于注解的IOC以及IOC的案例_第16张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第17张图片
创建实体类
Spring第二天Spring基于注解的IOC以及IOC的案例_第18张图片
补全业务层接口里的方法
Spring第二天Spring基于注解的IOC以及IOC的案例_第19张图片
业务层实现类
Spring第二天Spring基于注解的IOC以及IOC的案例_第20张图片
持久层实现类
Spring第二天Spring基于注解的IOC以及IOC的案例_第21张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第22张图片

XML的配置

Spring第二天Spring基于注解的IOC以及IOC的案例_第23张图片

成功打印

Spring的新注解@Configuration 和 @ComponentScan

上面xml中的内容只是把我们自己在类上添加的注解等同的xml内容省去了,但是还有数据库连接的一些配置参数这些xml文件中的内容怎么省去呢??

下图中的这些内容该怎么省去呢
Spring第二天Spring基于注解的IOC以及IOC的案例_第24张图片

新建一个类,这个类作为配置类
Spring第二天Spring基于注解的IOC以及IOC的案例_第25张图片

@Bean注解
Spring第二天Spring基于注解的IOC以及IOC的案例_第26张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第27张图片
一个细节问题,如果用@Bean配置方法时,如果方法有参数,spring框架回去容器中查找有没有可用的bean对象,查找的方式和Autowired注解的作用是一样的

@Configuration和@ComponentScan注解的方式是一样的
Spring第二天Spring基于注解的IOC以及IOC的案例_第28张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第29张图片
但这时候肯定会报错,因为代码中用到了bean.xml,谁让你那么冲动了???这么急着删它
Spring第二天Spring基于注解的IOC以及IOC的案例_第30张图片
那这该怎么办呢??
Spring第二天Spring基于注解的IOC以及IOC的案例_第31张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第32张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第33张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第34张图片

细节问题:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,@Configuration注解是可以不写的,因为它会自动根据这个参数去找到这个类

Spring第二天Spring基于注解的IOC以及IOC的案例_第35张图片

那又该怎么办?三种解决办法
第一种:我们把子配置类上面再加一个@Configuration注解,然后在@ComponentScan注解后面再加一个包名!那如果不加@Configuration的话可以吗?答案是不行的,必须得加。因为@ComponentScan扫描类里面的配置方法注解@Bean @Scope时,必须要扫描到这个类是配置类,因此必须要有@Configuration注解Spring第二天Spring基于注解的IOC以及IOC的案例_第36张图片

第二种:在参数后面再添加一个字节码文件作为参数
Spring第二天Spring基于注解的IOC以及IOC的案例_第37张图片

第三种方法:引入一个新的注解@Import
Spring第二天Spring基于注解的IOC以及IOC的案例_第38张图片

Spring的新注解 PropertySource

Spring第二天Spring基于注解的IOC以及IOC的案例_第39张图片
新建一个properties文件
Spring第二天Spring基于注解的IOC以及IOC的案例_第40张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第41张图片
但是@Vaule注解怎么会自动到properties文件中读取那些属性呢?
这时候新的注解闪亮登场@PropertySource


这时候我们发现用纯注解的方式,其实也并没有多么省事,那什么时候用注解,什么时候用XML配置呢?

如果是我们自己写的类,一般我们用注解的方式比较好
如果是jar包中的类,一般我们用xml配置的方式比较好
反正就是哪种比较方便,就用哪种

Spring整合junit问题分析

Spring第二天Spring基于注解的IOC以及IOC的案例_第42张图片Spring第二天Spring基于注解的IOC以及IOC的案例_第43张图片
junit根本就不知道spring框架,也就是@Test测试时,根本就没有IOC容器生成

解决办法:

Spring第二天Spring基于注解的IOC以及IOC的案例_第44张图片
配置文件的路径如果是用配置类 则在@ContextConfigurations注解后面加上
classes=配置类.class

配置文件的路径如果是用xml作为配置,则在@ContextConfigurations注解后面加上
locations=“classpath:bean.xml”
Spring第二天Spring基于注解的IOC以及IOC的案例_第45张图片

你可能感兴趣的:(Spring第二天Spring基于注解的IOC以及IOC的案例)