使用 JavaConfig 替换 Spring 的 XML 配置

在这个博客上,有关Spring的文章正变成一种趋势,我应该申请一个SpringSource的位置。由于我在使用XML 为Spring做配置时的固执,我的同事时常会骂我。是的,他看起来似乎是2000年代的,但XML确实具有一定的优势:

  1. 配置集中化,所有的组件并不是分散的,因此使你对beans有一个很好的概览,而且他们在同一个地方进行连接。
  2. 如果你需要分割文件,没问题,Spring可以帮你实现。然后(Spring)会通过内部<import>标签进行重新组合或者外部上下文文件进行聚合。
  3. 只有XML的配置可以显示的装配—而不是自动装配。有时候,后者(自动装配)对于我自己的口味有点过于神奇。表面上看很简单,却隐藏了复杂性:我们不仅需要在按类型和按名称自动装配之间进行切换,但更重要的是,在所有合格的转义,但经验更加丰富的Spring开发人员选择相关bean的策略。配置文件似乎让这变得更容易,但相对还是陌生的且了解的不够。
  4. 最后,但同等重要的,XML对Java文件是完全适用的:在两者之间没有耦合,因此类可以再多个不同的上下文配置文件中使用。

XML的唯一问题是你要等到运行时的时候来发现Bean里面的错误或者其他愚蠢的问题。另一方面,使用Spring的IDE插件(或者其他整合了Spring Tools Suite)就能帮助到你(处理这方面问题)。

在XML和直接注解在一个Bean类之间有一个有趣的选择,它就是JavaConfig,它是从V3.0后嵌入到Spring里的一个以前的独立项目。它用Java的编译时检查整合了XML的去耦的优势。JavaConfig能够等价看成是XML文件,不过它只是用Java编写的。它的完整文档在网上可以看到,而这篇文章帮助你开始使用JavaConfig。让我们把下面的XML文件移植为一个JavaConfig来作为一个例子吧:

01 <?xml version="1.0" encoding="UTF-8"?>
02 <beans xmlns="http://www.springframework.org/schema/beans"
03     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04     xsi:schemaLocation="http://www.springframework.org/schema/beans
05   
06http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
07   
08     <bean id="button" class="javax.swing.JButton">
09         <constructor-arg value="Hello World" />
10     </bean>
11   
12     <bean id="anotherButton" class="javax.swing.JButton">
13         <property name="icon" ref="icon" />
14     </bean>
15   
16     <bean id="icon" class="javax.swing.ImageIcon">
17         <constructor-arg>
18             <bean class="java.net.URL">
19               <constructor-arg value="http://morevaadin.com/assets/images/learning_vaadin_cover.png" />
20             </bean>
21         </constructor-arg>
22     </bean>
23 </beans>

下面是等价的文件:

01 import java.net.MalformedURLException;
02 import java.net.URL;
03   
04 import javax.swing.Icon;
05 import javax.swing.ImageIcon;
06 import javax.swing.JButton;
07   
08 import org.springframework.context.annotation.Bean;
09 import org.springframework.context.annotation.Configuration;
10   
11@Configuration
12 public class MigratedConfiguration {
13   
14     @Bean
15     public JButton button() {
16   
17         return new JButton("Hello World");
18     }
19   
20     @Bean
21     public JButton anotherButton(Icon icon) {
22   
23         return new JButton(icon);
24     }
25   
26     @Bean
27     public Icon icon() throws MalformedURLException {
28   
29         URL url = new URL("http://morevaadin.com/assets/images/learning_vaadin_cover.png");
30   
31         return new ImageIcon(url);
32     }
33}

用法很简单:使用@Configuration注解主要的类个别的生成方法就用@Bean来注解。恕我直言,唯一的缺点是它使用了自动连接。除此之外,它做的不错。

请注意,在Web工程中,Web部署文件应该增加以下几行:

 

1 <context-param>
2     <param-name>contextClass</param-name>
3     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
4 </context-param>
5 <context-param>
6     <param-name>contextConfigLocation</param-name>
7     <param-value>com.packtpub.learnvaadin.springintegration.SpringIntegrationConfiguration</param-value>
8 </context-param>

这篇文章Maven/Eclipse下的源码 下载

更多:

  • Java-based container configuration documentation
  • AnnotationConfigWebApplicationContextJavaDoc
  • @ContextConfigurationJavaDoc (to configure Spring Test to use JavaConfig)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值