Spring-Contextの3:XMLとGroovy DSLを使用してBeanを構成する
27562 ワード
第1話では注釈構成beanの使い方を示したが、これはSpring 3が導入した特性であり、Spring 2はXML方式でBeanを構成していた.その時、空一面のXMLファイルはSpringに
くだらないことは言わないで、Groovy DSLの構成に初めて親密に接触しましょう.
まず,XMLのbean構成を実装し,第1の例に沿った.
configuration.xml
このXMLファイルは私が多く説明する必要はありません.はっきりしています.Ok、例に従ってテストを書いて測定してください.
XmlConfigurationTest.java
このテストは第2話のテストと基本的に同じですが、Spring構成の読み取りはconfigurationからです.xmlは、@ContextConfigurationでSpringプロファイルとして指定されています.
Groovy DSLを使用するには、groovy依存を導入する必要があります.
pom.xml
次にgroovyファイルを新規作成して構成の作成を実現できます.
Configuration.groovy
これはGroovy DSLの強さと柔軟性を体現することはできません.私たちの例は簡単すぎるからです.
beansはxmlのbeansラベルに相当し、最初の行はbeanid+classの形式である.2行目はbean id+class+properties mapの形式です.2番目のパラメータは、propertyと値に対応するmap配列です.
同じBean構成を実現するには多くの書き方があります.
上記はGroovy構文の1つの特性であり,メソッドを呼び出すときにカッコはオプションであり,加算してもよいし,加算しなくてもよい.
ここでは、プロパティを設定する別の方法を使用して、プロパティを閉パッケージで設定します.
これはよりよく理解され、ref方法もオプションです.
さあ、やはりテストを書いて測ってみましょう.
GroovyDSLConfigurationTest.java
統合テストでxmlプロファイルがロードされている場合、SpringはGenericXmlContextLoaderクラスを提供し、注釈方式のプロファイルクラスがロードされている場合、SpringはAnnotationConfigContextLoaderクラスを提供します.しかしGroovyプロファイルSpring testContextフレームワークでは対応するLoaderは提供されていないため、本テスト方法では自分でLoaderを実現する必要があるが、実は簡単で、2つの方法を実現すればよい.
この例のソースコードは私のGitHubで自分でダウンロードしてください.
の称号を持たせた.Springもこの欠陥を変えようと努力してきた.Spring 3で導入された注釈方式は確かに構成を簡素化しているが、Spring 4ではXMLよりも文法が簡単で、Groovy自体がゲート言語であり、そのプロファイルはコードに相当し、複雑な構成を実現するために使用できる.くだらないことは言わないで、Groovy DSLの構成に初めて親密に接触しましょう.
まず,XMLのbean構成を実装し,第1の例に沿った.
configuration.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="movieService" class="huangbowen.net.service.DefaultMovieService"/> <bean id="cinema" class="huangbowen.net.service.Cinema"> <property name="movieService" ref="movieService"/> </bean> </beans>
このXMLファイルは私が多く説明する必要はありません.はっきりしています.Ok、例に従ってテストを書いて測定してください.
XmlConfigurationTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package huangbowen.net; import huangbowen.net.service.Cinema; import huangbowen.net.service.DefaultMovieService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/configuration.xml"}) public class XmlConfigurationTest { @Autowired private ApplicationContext applicationContext; @Autowired private Cinema cinema; @Test public void shouldGetCinemaInstance() { Cinema cinema = applicationContext.getBean(Cinema.class); assertNotNull(cinema); } @Test public void shouldGetAutowiredCinema() { assertNotNull(cinema); } @Test public void shouldGetMovieServiceInstance() { assertNotNull(cinema.getMovieService()); assertThat(cinema.getMovieService(), instanceOf(DefaultMovieService.class)); } }
このテストは第2話のテストと基本的に同じですが、Spring構成の読み取りはconfigurationからです.xmlは、@ContextConfigurationでSpringプロファイルとして指定されています.
Groovy DSLを使用するには、groovy依存を導入する必要があります.
pom.xml
1
2
3
4
5
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.2.2</version> </dependency>
次にgroovyファイルを新規作成して構成の作成を実現できます.
Configuration.groovy
1
2
3
4
5
6
7
beans { movieService huangbowen.net.service.DefaultMovieService cinema huangbowen.net.service.Cinema, movieService : movieService }
これはGroovy DSLの強さと柔軟性を体現することはできません.私たちの例は簡単すぎるからです.
beansはxmlのbeansラベルに相当し、最初の行はbeanid+classの形式である.2行目はbean id+class+properties mapの形式です.2番目のパラメータは、propertyと値に対応するmap配列です.
同じBean構成を実現するには多くの書き方があります.
1
2
3
movieService (huangbowen.net.service.DefaultMovieService) cinema(huangbowen.net.service.Cinema, {movieService : movieService})
上記はGroovy構文の1つの特性であり,メソッドを呼び出すときにカッコはオプションであり,加算してもよいし,加算しなくてもよい.
1
2
3
4
5
movieService huangbowen.net.service.DefaultMovieService cinema (huangbowen.net.service.Cinema) { movieService :ref movieService }
ここでは、プロパティを設定する別の方法を使用して、プロパティを閉パッケージで設定します.
1
2
3
4
5
movieService huangbowen.net.service.DefaultMovieService cinema (huangbowen.net.service.Cinema) { movieService : movieService }
これはよりよく理解され、ref方法もオプションです.
さあ、やはりテストを書いて測ってみましょう.
GroovyDSLConfigurationTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package huangbowen.net; import huangbowen.net.service.Cinema; import huangbowen.net.service.DefaultMovieService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AbstractGenericContextLoader; import static huangbowen.net.GroovyDSLConfigurationTest.*; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(value = "classpath:Configuration.groovy", loader = GenericGroovyContextLoader.class) public class GroovyDSLConfigurationTest { public static class GenericGroovyContextLoader extends AbstractGenericContextLoader { @Override protected BeanDefinitionReader createBeanDefinitionReader( GenericApplicationContext context) { return new GroovyBeanDefinitionReader(context); } @Override protected String getResourceSuffix() { return ".groovy"; } } @Autowired private ApplicationContext applicationContext; @Autowired private Cinema cinema; @Test public void shouldGetCinemaInstance() { Cinema cinema = applicationContext.getBean(Cinema.class); assertNotNull(cinema); } @Test public void shouldGetAutowiredCinema() { assertNotNull(cinema); } @Test public void shouldGetMovieServiceInstance() { assertNotNull(cinema.getMovieService()); assertThat(cinema.getMovieService(), instanceOf(DefaultMovieService.class)); } }
統合テストでxmlプロファイルがロードされている場合、SpringはGenericXmlContextLoaderクラスを提供し、注釈方式のプロファイルクラスがロードされている場合、SpringはAnnotationConfigContextLoaderクラスを提供します.しかしGroovyプロファイルSpring testContextフレームワークでは対応するLoaderは提供されていないため、本テスト方法では自分でLoaderを実現する必要があるが、実は簡単で、2つの方法を実現すればよい.
この例のソースコードは私のGitHubで自分でダウンロードしてください.