浅谈Spring JavaConfig
之前一直都是使用xml以及@bean之类的注解的来配置spring容器中的bean,前几天看springboot的启动原理接触到@configuration以及javaconfig,今天抽空了解了下。
Javaconfig是在spring3中引入的,利用的是java5中的注解方式,提供了一种纯java代码的方式来配置bean。
为什么spring要新增一种方式来配置bean呢,相对xml配置的方式Javaconfig可以具有哪些优势呢,由于实现的方式是注解,那我们来看看java为什么要引入注解。
先来看注解的作用是什么,注解是用来对代码进行描述,也就是我们常常说的元数据。其中有些是给开发者看的或者是IDE使用的,有些是需要代码运行时根据这些数据来定制逻辑的; 例如Deprecated,如果这里只是用来提示开发人员这个类被废弃了,那我们用注释就好了,如果是给IDE来使用,那就与那些运行时需要的数据类似,都是作为代码的配置数据,如果没有注解,我们可以通过其他配置文件的方式来对代码进行说明,比如我想要实现Deprecated的功能,那就需要新建一个deprecated.properties的文件,将所有废弃的类放进来,IDE就可以读取这些数据,然后对相应的类进行标识了。有了注解之后,我们可以很方便的实现这个功能,而且配置跟代码放在一起,也更方便阅读。注解往往是一个概念或者定义,而代码就是需要去修饰的主体,类似一个形容词来修饰一个定语一样,放在一起才能形成一个完整的场景。
那是不是javaconfig的好处就是方便bean配置的功能开发与方便阅读呢,我觉得不是,对于第一点,由于xml方式的配置是已有的功能,并不是新功能开发,那对于以后增加新的概念(xml的标签或者新的注解),可能在两者之间开发量存在差异,但也并不大,因为spring bean的配置xml schema已经有很好的拓展机制了。对于第二点,方便阅读来说的话,由于javaconfig的注解并不是用来修饰已有的功能类,而只是一个用来专门放置配置信息的类,其实并没有起到修饰场景的好处。
那究竟为什么要引入javaconfig呢,官方文档给出的理由是
1. javaconfig使用纯java代码的方式,可以充分利用复用、继承、多态等特性
2. 有更多的自由度来控制bean的初始化,注入以及复杂对象的构建
3. 由于只用到java,只需有IDE就可以尽情的掌控配置逻辑
上面的理由1跟理由2比较有说服力,因为3的话其它IDE基本对xml支持也很好,而且基本都会安装spring xml的插件,也都具有提示,校验,自动补全等功能。
选择javaconfig的最重要原因是Bean的配置是通过Java来完成的,除了容器配置能力之外,有了更多的自由度,可以充分利用java的所有功能,而无需依赖容器提供的能力。与xml之间的一些差异,例如查询方便,集中管理等受每个人使用习惯会有差异,但问题都不大。
例如,如果想要实现一个多态的bean配置方式,Javaconfig可以如下实现
抽象类
利用多态配置bean
作者:真海
链接:https://www.jianshu.com/p/b54d564efe57
共同学习,写下你的评论
评论加载中...
作者其他优质文章