실제 애플리케이션 개발에서는 자동 설정, JavaConfig 설정, XML 설정을 함께 사용해야 하는 경우가 종종 발생합니다. 이러한 경우 모든 설정을 통합할 수 있는 루트 설정을 구성하는 것이 좋습니다.
JavaConfig를 루트 설정으로 사용하는 방법
JavaConfig 클래스를 루트 설정으로 사용할 경우, @ComponentScan, @Import, @ImportResource 어노테이션을 조합하여 다양한 설정을 통합할 수 있습니다.
루트 설정 클래스 예시
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ComponentScan
@Import({ MusicPlayerConfig.class, DiscConfig.class })
@ImportResource({"classpath:disc-beans.xml", "classpath:player-beans.xml"})
public class AppConfig {
}
테스트 클래스 예시
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MusicSystemTest {
@Autowired
private AutoDisc autoDisc;
@Autowired
private MusicDisc musicDisc;
@Autowired
private MusicPlayer musicPlayer;
@Autowired
private XmlDisc xmlDisc;
@Autowired
private ConfigDisc configDisc;
@Test
public void testAllComponents() {
autoDisc.play();
musicDisc.play();
musicPlayer.play();
xmlDisc.play();
configDisc.play();
}
}
XML을 루트 설정으로 사용하는 방법
XML 파일을 루트 설정으로 사용할 경우, <context:component-scape> 요소로 자동 스캔을 활성화하고, <bean> 요소로 JavaConfig 설정 클래스를, <import> 요소로 다른 XML 설정 파일을 로드합니다.
루트 XML 설정 파일 예시
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<bean class="com.example.springapp.DiscConfig"></bean>
<bean class="com.example.springapp.PlayerConfig"></bean>
<import resource="disc-beans.xml"></import>
<import resource="player-beans.xml"></import>
</beans>
XML 기반 테스트 클래스 예시
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MusicSystemXmlTest {
private static ApplicationContext context =
new ClassPathXmlApplicationContext("app-config.xml");
private AutoDisc autoDisc = context.getBean("autoDisc", AutoDisc.class);
private MusicDisc musicDisc = context.getBean("musicDisc", MusicDisc.class);
private MusicPlayer musicPlayer = context.getBean("musicPlayer", MusicPlayer.class);
private XmlDisc xmlDisc = context.getBean("xmlDisc", XmlDisc.class);
private ConfigDisc configDisc = context.getBean("configDisc", ConfigDisc.class);
@Test
public void testAllComponents() {
autoDisc.play();
musicDisc.play();
musicPlayer.play();
xmlDisc.play();
configDisc.play();
}
}
구성 요소 클래스 예시
자동 스캔을 사용하는 클래스
import org.springframework.stereotype.Component;
@Component
public class AutoDisc {
public void play() {
System.out.println("자동 설정으로 등록된 디스크가 재생됩니다.");
}
}
JavaConfig에 등록된 클래스
public class MusicDisc {
private String artist = "가수명";
private String title = "곡명";
public void play(){
System.out.println("재생 중: " + title + " - " + artist);
}
}
JavaConfig 설정 클래스
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DiscConfig {
@Bean
public MusicDisc musicDisc(){
return new MusicDisc();
}
}
의존성 주입을 사용하는 클래스
public class MusicPlayer {
private MusicDisc disc;
public MusicPlayer(MusicDisc disc) {
this.disc = disc;
}
public void play() {
disc.play();
}
}
플레이어 설정 클래스
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class PlayerConfig {
@Bean
public MusicPlayer musicPlayer(MusicDisc disc){
return new MusicPlayer(disc);
}
}
XML 설정에 등록된 클래스
public class XmlDisc {
private String artist = "XML 아티스트";
private String title = "XML 곡";
public void play() {
System.out.println("XML 설정으로 재생: " + title + " by " + artist);
}
}
XML 설정 파일 예시
<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="xmlDisc" class="com.example.springapp.XmlDisc"></bean>
</beans>
두 번째 XML 설정 파일 예시
<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="configDisc" class="com.example.springapp.ConfigDisc"></bean>
</beans>
두 번째 XML 설정에 등록된 클래스
public class ConfigDisc {
public void play(){
System.out.println("두 번째 XML 설정으로 재생되는 디스크입니다.");
}
}