使用 JavaConfig 替换 Spring 的 XML 配置
在这个博客上,有关Spring的文章正变成一种趋势,我应该申请一个SpringSource的位置。由于我在使用XML 为Spring做配置时的固执,我的同事时常会骂我。是的,他看起来似乎是2000年代的,但XML确实具有一定的优势:
XML的唯一问题是你要等到运行时的时候来发现Bean里面的错误或者其他愚蠢的问题。另一方面,使用Spring的IDE插件(或者其他整合了Spring Tools Suite)就能帮助到你(处理这方面问题)。
在XML和直接注解在一个Bean类之间有一个有趣的选择,它就是JavaConfig,它是从V3.0后嵌入到Spring里的一个以前的独立项目。它用Java的编译时检查整合了XML的去耦的优势。JavaConfig能够等价看成是XML文件,不过它只是用Java编写的。它的完整文档在网上可以看到,而这篇文章帮助你开始使用JavaConfig。让我们把下面的XML文件移植为一个JavaConfig来作为一个例子吧:
view source?print?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
?
?06
http://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
>
下面是等价的文件:
view source?print?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部署文件应该增加以下几行:
?
view source?print?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?documentationAnnotationConfigWebApplicationContextJavaDoc@ContextConfigurationJavaDoc?(to configure Spring Test to use JavaConfig)?
?
?
?