Spring的Xml和JavaConfig 扩展你选哪一个?
引言
上一篇文章我们有怎么介绍到如何通过XML的形式来定义Spring的扩展《Spring面试高频题如何:自定义XML schema 扩展》,好多人都在吐槽现在都什么年代了,xml还有人再用吗?这玩意早就过时了吧,还有必要去掌握它吗?Spring官网都把这种方式放在最后面了,可想而知它的重要性到底怎样了?既然大家都吐槽了,那我们今天继续来介绍下基于注解的Spring扩展。
JavaConfig 配置扩展
从Spring3.0开始Spring提供了JavaConfig的方式可以用来代替以前XML的这种方式,原来在XML配置里的都可以通过注解来一一替换实现。主要通过@Configuration,@Bean, @Import,和@DependsOn这几个注解来搭配实现的。这种方式也是SpringBoot所使用的。
@Configuration
@Configuration只能标记在类上,表示该类为JavaConfig类,使其可以被Spring IOC容器扫描识别并创建Bean加入到容器中。@Configuration类就相当于以往的一个xml文件。下面我们看一个官网提供的例子:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
这个定义的JavaConfig就相当于原来如下XML的配置:
<beans>
<bean id="myService" class="cn.javajr.services.MyServiceImpl"/>
</beans>
@Bean
@Bean只能被标记在方法上,表示该方法返回一个Spring Bean,可以被IOC容器托管,相当于以前在xml文件中写的元素。
- name:指定一个或者多个bean的名字,当没有设置name时,Spring容器会默认将@Bean方法名作为bean name,当设置了name后,就不会再使用方法名,同时设置多个name时,除第一个name外,其他的都会作为bean的别名。相当于xml配置中的name属性。
- initMethod:指定容器在初始化完bean后调用的方法。相当于xml配置中的init-method属性。
- destroyMethod:指定在容器在销毁bean前调用的方法。相当于xml配置中的 destroy-method。
- autowire:指定bean在自动装配时依赖注入使用的策略,取值可以参考Enum类Autowire 的三个常量:Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。
@Import
XML配置中的标签,基于JavaConfig提供了@Import来组合模块化的配置类,使用方式如下所示:
@Configuration()
@Import({ApplicationContextConfig.class})
public class ApplicationContextConfig {
上面就比较简单的介绍了几种通过JavaConfig注解来替换XML形式的注解,使用起来还是非常简单的,如果你有对以前的XML配置文件都比较了解的话,使用JavaConfig就更加简单方便了。
Dubbo的JavaConfig
上篇文章我们介绍了dubbo通过XML的方式自定义扩展,今天我们就接着看看dubbo是如何通过JavaConfig来替代XML形式的扩展的。
我们看看dubbo的服务提供者是如何通过注解来实现的
@Configuration
@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.impl")
@PropertySource("classpath:/spring/dubbo-provider.properties")
static class ProviderConfiguration {
}
@Configuration这个注解我们上面已经介绍过了,我们重点看下@EnableDubbo这个注解
@EnableDubbo 其实又是@EnableDubboConfig @DubboComponentScan是通过这两个组合注解来实现的,
@EnableDubboConfig注解实现如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Import(DubboConfigConfigurationRegistrar.class)
public @interface EnableDubboConfig {
这个注解使用了@Import(DubboConfigConfigurationRegistrar.class) 所以Spring 在处理
@EnableDubboConfig 注解 的时候就会去实例化DubboConfigConfigurationRegistrar
并且调用它的registerBeanDefinitions方法,这个方法主要是对propties文件进行解析并根据不同的配置
项生成对应类型的Bean对象。
总结
- 通过基于XML和基于Java的配置扩展,可以使用户通过Spring使用我们研发的组件,提供很好的易用性。
- 虽然现在大多数都是采用JavaConfig这种方式了,但是还是有人会比较喜欢xml这种方式
xml可以让配置集中化,所有的组件并不是分散的,因此使你对beans有一个很好的概览,比如mybais配置文件、SpingMvc配置文件,都放在一起,如果你需要分割文件,Spring可以帮你实现。然后(Spring)会通过内部标签进行重新组合或者外部上下文文件进行聚合。 - xml和JavaConfig 当然也是可以混合使用的,至于使用哪种方式还是看个人的编程习惯,没有哪种方式是绝对的好,各有千秋。
- 看完这两篇关于不同方式Spring的 扩展我们是不是可以自己动手去实现一个了。
结束
- 由于自己才疏学浅,难免会有纰漏,假如你发现了错误的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、赞赏、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。
巨人的肩膀摘苹果:
https://javajr.cn
最新文章
- Scrapy爬取自己的博客内容
- Postman使用小技巧 - 用Postman生成Request代码
- -g vs -rdynamic
- 模拟学信网登录,Cookie 序列化,在反序列化之后不能用的问题
- K-means Algorithm
- PHP 发邮件不换行
- django1.6读书笔记一
- Python学习一
- c#扩展方法的使用
- 【练习】jQuery
- 每日冲刺报告-Day3
- iOS---------- Safe Area Layout Guide before iOS 9.0
- c++入门之字符相关入门
- oracle-----视图/物化视图
- #电脑磁盘分区#新买的电脑一般只有C盘或者C盘和D盘,怎么加多几个盘呢
- WebView 错误码整理
- 阿里云mysql远程连不上
- 在thinkphp里面执行原生的sql语句
- Load generator连接失败的解决办法!(转)
- 分布式缓存技术memcached学习系列(三)——memcached内存管理机制
热门文章
- .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布
- node_exporter自定义监控
- css 怎么在文字两边加上横线
- gRPC在 ASP.NET Core 中应用学习(二)
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
- 201871010109-胡欢欢-实验一-软件工程的准备(初识github及《现代软件工程-构建之法》)
- Dynamics CRM修改密码界面
- 痞子衡嵌入式:在i.MXRT启动头FDCB里调整Flash工作频率也需同步设Dummy Cycle
- Ubuntu16.04下安装virtualbox,配置及卸载
- 2-69.x的平方根