티스토리 뷰

웹/스프링 튜토리얼

04. @Configuration

시나모온 2020. 4. 17. 06:08

https://gcamp.tistory.com/https://www.youtube.com/channel/UC3vDpu3GvKADVUDPkGYiCxA

을 통해서 학습했으며, 아래 자료는 위의 자료로부터 가져온 것임을 밝힙니다.

 

 

이전 시간에 applicationContext.xml을 이용해서 스프링 컨테이너를 구성했었다. 하지만 xml코드다 보니 보기 불편하고 지저분하여 java파일로 바뀌는 추세라고 한다. java파일로 된다고 new을 이용해서 생성하는 것이 아닌 어노테이션을 이용해서 applicationContext.xml의 기능을 대신할 수 있도록 하는 것이라고 한다.

 

 

applicationContext.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="kFood" class="p03001.KoreaFood"/>
	   <bean id="cFood" class="p03001.ChianFood"/>
	   
	   <bean id="gFood" class="p03001.GlobalFood"/>

</beans>

 

FoonConf.java

package p04001;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FoodConf {
	
	@Bean
	public KoreaFood kFood() {
		return new KoreaFood();
	}
	
	@Bean
	public ChinaFood cFood() {
		return new ChinaFood();
	}
	
	@Bean
	public GlobalFood gFood() {
		return new GlobalFood();
	}
	
}

applicationContext.xml을 FoodConf.java로 바꾸기 위해서 @Configurable라는 어노테이션을 붙여서 스프링 컨테이너로 사용할 것이라고 명시해주어야 한다. 그리고 컨테이너에 담길 빈들도 @Bean이라고 어노테이션을 붙여준다.

 

applicationContext.xml과 FoodConf.java를 비교해보면, applicationContext.xml의 빈의 id에 해당하는 값이 메소드명으로 바뀐 것을 알 수 있다. 그리고 그 메소드는 객체를 생성해서 리턴하는 기능을 한다.

 

 

MainClass.java

package p04001;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		/*
		KoreaFood koreaFood = new KoreaFood();
		ChianFood chinaFood = new ChinaFood();
		
		GlobalFood globalFood = new GlobalFood();
		
		globalFood.makeFood(koreaFood); // korea food
		globalFood.makeFood(chinaFood); // china food
		*/
		
		/*
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
		
		GlobalFood food = ctx.getBean("gFood", GlobalFood.class);
		
		food.makeFood(ctx.getBean("kFood", KoreaFood.class));
		food.makeFood(ctx.getBean("cFood", ChinaFood.class));
		
		ctx.close();
		*/
		
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(FoodConf.class);
		
		GlobalFood food = ctx.getBean("gFood", GlobalFood.class);
		
		food.makeFood(ctx.getBean("kFood", KoreaFood.class));
		food.makeFood(ctx.getBean("cFood", ChinaFood.class));
		
		ctx.close();
		
	}

}

 

MainClass.java도 조금 수정을 해야한다. 이전에는 GenericXmlApplicationContext로 스프링 컨테이너를 불러왔는데, 어노테이션 방식으로 바꿨기 때문에 AnnotationConfigApplicationContext로

 

 

어느 게 좋다 나쁘다 없이 둘 다 혼용해서 사용한다고 한다. 복잡한 기능의 경우 어노테이션이 없는 경우도 있다고 한다. 한 번 정해놓으면 잘 바뀌지 않을 때도 xml을 이용한다고 한다. 반면에 빈번하게 바꿔야 하는 경우 어노테이션을 주로 사용한다고 한다.

 

 

 

 

github : https://github.com/ssjf409/spring

 

개발 환경 : eclipse 2019-12, Oracle, tomcat


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

' > 스프링 튜토리얼' 카테고리의 다른 글

06. WEB MVC 프로젝트 구성  (0) 2020.04.17
05. WEB MVC  (0) 2020.04.17
03. 메이븐을 이용한 프로젝트 구성  (0) 2020.04.17
02. 의존 객체와 스프링 컨테이너  (0) 2020.04.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함