note

Spring @Qualfier 어노테이션 본문

JSP/Spring

Spring @Qualfier 어노테이션

투한 2012. 2. 29. 17:43








applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	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-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<!-- 
	-RequiredAnnotationBeanPostProcessor  :@Required 사용시
	-AutowiredAnnotationBeanPostProcessor : @Autowired 사용시
	-CommonAnnotationBeanPostProcessor : @Resource,@PostConstruct , @PreDestroy 사용시
	-ConfigurationClassPostProcessor : @Configuration 사용시 
	
	아래 태그로 대체 가능
	<context:annotation-config /> 
	-->

	
	<!-- @Autowired 어노테이션 사용시 필수적으로 설정 -->
	<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
	
	<bean id="monitor" class="madvirus.spring.chap04.homecontrol.SystemMonitor" />
	
	<bean id="sender" class="madvirus.spring.chap04.homecontrol.SmsSender" />


	<!-- @Qualifer 어노테이션을 이용한 자동 설정 제한 -->
	<bean id="systemMonitor" class="madvirus.spring.chap04.homecontrol.SystemMonitor2" />
	<bean id="recorder" class="madvirus.spring.chap04.homecontrol.Recorder">
		<qualifier value="main" />
	</bean>
</beans>


SystemMonitor2.java
package madvirus.spring.chap04.homecontrol;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class SystemMonitor2 {
	private MessageSender sender;
	@Autowired
	@Qualifier("main")
	private Recorder recorder;

	public SystemMonitor2(MessageSender sender) {
		this.sender = sender;
	}
	public SystemMonitor2() {
	}
	public MessageSender getSender() {
		return sender;
	}
	@Autowired
	public void setSender(MessageSender sender) {
		this.sender = sender;
	}
	public Recorder getRecorder() {
		return recorder;
	}
	public void setRecorder(Recorder recorder) {
		this.recorder = recorder;
	}	
}


Recorder.java
package madvirus.spring.chap04.homecontrol;

public class Recorder {

}



Main03.java
package madvirus.spring.chap04.homecontrol;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main03 {
	public static void main(String[] args) {
		String[] configLocations = new String[] { "applicationContext.xml" };
		ApplicationContext context = new ClassPathXmlApplicationContext(
				configLocations);
		
		SystemMonitor2 monitor = context.getBean("systemMonitor",SystemMonitor2.class);
		System.out.println(monitor.getSender());
		System.out.println(monitor.getRecorder());
	}
}


aa
aa




@Qualifier("main")

recorder 안에 main이라고 명시 되어있어야 받겠다라는 표현
즉 Autowired에서 한단계더 강력하게 데이터를 걸러 내겠다는(?)
 

부가적인 설정 제어를 위한 







실행화면(Main03.java)

madvirus.spring.chap04.homecontrol.SmsSender@c1918e

madvirus.spring.chap04.homecontrol.Recorder@3b26f3