liguofeng29’s blog

個人勉強用ブログだっす。

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);

XML配置にJava配置を読み込む

<bean class="app.javaConfig.AppConfig" />

Java配置にXML配置を読み込む

@Configuration
@ImportResource("classpath:/beans.xml")
public class AppConfig
{}