为什么要用新注解呢?
因为有些东西是原始注解无法替代的,前面我们使用原始注解都是在自己定义的类,可以随意增加属性和方法,但是当我们用第三方类的时候(也就是别人已经定义好的类)这个我们是无法去给它添加属性,方法,也不能去找到别人的源码去里面添加注解,还有在spring的配置文件中我们也无法给类添加组件扫描,这时候我们就要用到新注解。
无法用原始注解来替代的:
关于Spring的新注解:
我们使用新注解要有一个思想,这个思想就是替代思想,我们要用一个核心配置的类去替代XML核心文件。
首先我们先创建一个类去替代核心文件:
然后我们在该类上加一个注解@Configuration(),这个注解就标志这该类是一个核心配置类
接下来我我们就用新注解来完成原始注解无法完成的事情
组件扫描:
我们利用注解@ComponentScan()注解去完成,里面的参数就是我们要扫描的文件包
非自定义的Bean配置(也就是不是自己定义的类),我们通过创建一个方法来实现,这个方法的返回值就是放到容器Bean中的类型(现在我们就以数据连接池类作为例子)
注解@Bean()里面的参数就是存储到容器中的名字
加载properties配置文件:
经过上面代码发现我们这样写又相当于耦合死了,所以我们要像在容器中那样去调用其他的配置文件properties
我们通过注解@PropertySource()去完成加载properties配置文件。里面的参数就是配置文件的路径,记得要加一个classpath
我们通过用el表达式去直接调用properties里的参数,这样就不会耦合死了
有人就在想,为什么不在setDriverClass中直接用el表达式,因为这里面本来就是传字符串的,你用el表达式它也解析不了,这时候我们就通过以前的原始注解@value()进行普通数据的依赖注入,因为value里面的参数是能够去解析el表达式的。
引入其他文件import:
我们在利用XML配置文件的时候为什么要用import呢?因为如果核心配置文件非常大,我们就需要把核心配置文件分模块的分开成各个小的配置文件,各管各的,最后再引入到核心配置文件中。同样如果核心配置类很大的话,我们也需要去把它分成小块小块的。最后再引入到核心配置类中。
第一步我们先创建一个分配置类,我们现在创建一个关于专门做数据源配置的类
然后我们在核心配置类中,把关于数据源的配置全部转接过去
接下来我们就把非核心配置类(也就是我们现在说的这个数据源配置类)导入到核心配置类中
@Import()里面的参数其实是一个数组,如果你要加入不只一个配置类,那么就这么写
@Import({DataSourceConfiguration.class,XX.class})
还有这里面的参数为什么写的是一个字节码文件呢?因为这本来就是一个类
现在我们来写一个测试类,来验证我们是否利用新注解配置成功
这里面可以看出我们根本就没有使用spring的核心配置文件,我们就是通过核心配置类来完成的,说明我们的新注解方式,已经替代了我们以前的XML文件