Spring4 - XML設定ファイルをjavaクラスで記述する
Spring3.0からXML定義だけではなくjavaクラスでも定義可能である。
Java配置クラス常用Annotaion
- @Configuration : class修飾、設定ファイルであること
- @Bean : method修飾、Beanであること
- @Value : field修飾、変数であること
- @Import : class修飾、他のJava配置クラス読み込み
- @Scope : method修飾、Beanのスコープ
- @Lazy : method修飾、Beanの遅延初期化
- @DependsOn : method修飾、依頼Bean初期化
<?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- Bean定義 --> <bean id="person" class="app.impl.Japanese"> <!-- コンストラクタによるDI --> <constructor-arg value="佐藤"></constructor-arg> <constructor-arg value="20" ></constructor-arg> <!-- setterによるDI --> <property name="pen" ref="bluePen"/> </bean> <!-- 赤ペンを定義 --> <bean id="redPen" class="app.impl.RedPen"/> <!-- 青ペンを定義 --> <bean id="bluePen" class="app.impl.BluePen"/> </beans>
↓↓↓↓↓↓XML定義をjava定義にすると↓↓↓↓↓↓↓↓↓↓↓
package app.javaConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import app.Pen; import app.Person; import app.impl.BluePen; import app.impl.Japanese; import app.impl.RedPen; @Configuration public class AppConfig { // Value変数 @Value("佐藤") String personName; @Value("20") int personAge; // Bean定義 @Bean(name="person") public Person person() { Japanese p = new Japanese(personName, personAge); p.setPen(redPen()); return p; } // Bean定義 @Bean(name="redPen") public Pen redPen() { return new RedPen(); } // Bean定義 @Bean(name="bluePen") public Pen bluePen() { return new BluePen(); } }
Springコンテナー取得
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); Person p = context.getBean("person", Person.class);
<bean class="app.javaConfig.AppConfig" />
@Configuration @ImportResource("classpath:/beans.xml") public class AppConfig {}