滚蛋吧~ XML 君

Long long time ago, 在《Spring In Action》一书中看到这么一句话 JavaConfig is the preferred option for explicit config

Long long time ago, 在《Spring In Action》一书中看到这么一句话 JavaConfig is the preferred option for explicit configuration because it’s more powerful, type-safe, and refactor-friendly 。不过当时并不知道 JavaConfig 是神马东东就选择性忽略了。最近新的项目采用了 Spring Boot + JavaConfig ,接触了一个星期的 JavaConfig,感觉还不错,简单比较下它和 XML。由于接连看了 4 部韩国灾难片心情比较蓝瘦,就暂时不要指正错误了,错就错吧(づ。◕‿‿◕。)づ

滚蛋吧~ XML 君

XML

虽然早在 Spring 3 中就开始支持以 JavaConfig 的方式配置项目,但感觉目前主流的还是以 XML + Annotation 的方式,很少见到使用 JavaConfig 的。可能有点以偏概全了,但在前司和前前司接触到的项目都是以 XML + Annotation 混合的方式配置的,即在 XML 配置文件中开启注解扫描, 业务 bean 的配置注入采用注解( @Serivce, @Autowire 等等),全局的一些配置(如 MyBatis 的 DataSource,SqlSessionFactory ,web.xml 等等)使用 XML。

虽然 XML + Annotation 的方式比纯用 XML 配置的方式少写了很多 XML,但本质上还是基于 XML 的。

XML 的配置文件比较冗长,不易书写,而且可读性也不高。不知道大家感觉怎么样,反正我看着是挺头疼的╥﹏╥…

JavaConfig

先简单介绍一下 JavaConfig,JavaConfig即Java Configuration, 即用纯 Java 的方式来配置 Spring

IoC 容器,允许开发者用代码来表示配置逻辑,不再需要 XML。粗略翻了两本关于 Spring Boot的书, JavaConfig 都是最推荐的配置方式。

使用 JavaConfig 的好处,Spring 官方文档中说的很清楚:

  1. JavaConfig 为依赖注入提供了一个真正面向对象的机制,这意味着开发者可以在配置代码中充分利用 Java 重用、继承和多态性等特性。
  2. 开发者可以完全控制实例化和依赖注入,即使是最复杂的对象也可以很优雅地处理。
  3. 因为使用 JavaConfig 只需要 Java,可以很容易的 refactor 代码,而无需再 IDE 之外使用特殊的工具或插件。

JavaConfig 其实很简单,主要是通过 @Configuration 和 @Bean 来进行配置。@Configuration 注解的作用是声明当前类是一个配置类, 就相当于一个 XML 文件。 @Bean 注解声明当前方法返回的是一个 bean。

可能这样说对于用惯了 XML 的人还是比较抽象的,下面看看这些注解与 XML 配置的对应关系。

JavaConfig 与 XML

1.

JavaConfig: @Configuration

XML:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">


</beans>

2.

JavaConfig: @Bean

XML:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://127.0.0.1:3307/giraffe"/>
<property name="username" value="ymy"/>
<property name="password" value="666666"/>
</bean>

3.

JavaConfig:@ComponentScan

XML:

<context:component-scan>

4.

JavaConfig:@Import

XML:

<import resource="XXX.xml"/>

比如要配置一个 dataSource, 在 XML 中通常的做法是这样的:

<bean id="drMainDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${mysql.datasource.url}"/>
<property name="username" value="${mysql.datasource.username}"/>
<property name="password" value="${mysql.datasource.password}"/>
<property name="maxActive" value="{mysql.datasource.max-active}"/>
</bean>

对应的 JavaConfig 是酱紫的:

@Configuration
public class DataAccessConfig extends ConfigurationSupport {
@Bean(name = "dataSource")
public DataSource mysqlDataSource(@Value("${mysql.datasource.url}") String url,
@Value("${mysql.datasource.username}") String username,
@Value("${mysql.datasource.password}") String password,
@Value("${mysql.datasource.driverClass}") String driver,
@Value("${mysql.datasource.max-active}") int maxActive) {


DruidAbstractDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxActive(maxActive);
return dataSource;
}
}

总结

虽然才接触了一周的 JavaConfig, 但是相见恨晚啊, 个人还是更喜欢 JavaConfig 的配置方式的。JavaConfig 的配置文件可读性更高也更容易学习,记住简单的几个注解即可;借助 IDE 的力量,更不容易出错;而且脑袋再也不用在 Java 和 XML 间来回切换了!!!!!

滚蛋吧~ XML 君

相关文档

——————————————-片 尾 彩 蛋 :tada::tada::tada:—————————————————

咳咳,预警预警!!!下面的部分与本文主旨无关。

首先,换了个新锅,可以预约煮粥,再也不用早起煮粥了,幸福感提升 200%。

其次,在匿名人士的帮助下上线了新版未翻墙模式下的评论,优化了样式。唉,这是谁的男朋友这么有才华,好羡慕她哦︿( ̄︶ ̄)︿

滚蛋吧~ XML 君

最后,嘿嘿,关注个公众号再走吧( ^__^ )

滚蛋吧~ XML 君
未登录用户
全部评论0
到底啦