- 従来は開発者がAppConfigを使用して直接オブジェクトを生成し依存性を注入していましたが、これからはSpringContainerを使う。
- 一般的にApplicationContext(インターフェース、多形性が適用される)をSpringContainerという。
- BeanFactoryもあるが、直接使用する場合はほとんどないためだ。
- XML ベースまたはAnnotation ベースのJava設定クラス、Groovy など、さまざまな形式の設定情報が受け入れられるよう柔軟に立つようになっている。
最近では、AnotationベースのJava設定クラスを活用した方法を多く使用し、その他多く使用される方法としてはXMLを使用した方法がある。
< XML を使って作成 >
- レガシープロジェクトがXMLになっている場合も多く、コンパイルなしでBean設定情報を変更できるメリットもあるので、学んでおくとよい。
- Generic Xml Application Contextを使用しながら、xml設定ファイルをめくるとよい。
appConfig.xml
<?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="memberService" class="hello.hellospring.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="memberRepository" class="hello.hellospring.member.MemoryMemberRepository">
</bean>
<bean id="orderService" class="order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"></constructor-arg>
<constructor-arg name="disCountPolicy" ref="discountPolicy"></constructor-arg>
</bean>
<bean id="discountPolicy" class="discount.RateDiscountPolicy">
</bean>
</beans>
package hello.hellospring;
import hello.hellospring.member.MemberService;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class XmlApplicationContextTest {
@Test
void test1() {
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}
}