|
|
|
|
|
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.AbstractApplicationContext;
public class SpringAnnotationTest {
@Test
public void configTest() {
AbstractApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);
Config config = ac.getBean(Config.class);
ac.getBean(Hello.class).print();
}
private static class Config {
@Bean
public Hello hello(Printer printer) {
Hello hello = new Hello();
hello.setPrinter(printer);
return hello;
}
@Bean
public Printer printer() {
return new Printer();
}
}
private static class Hello {
Printer printer;
public void setPrinter(Printer printer) {
this.printer = printer;
}
public Printer getPrinter() {
return this.printer;
}
public void print() {
if(printer == null)
System.out.println("print = null");
else {
printer.print();
}
}
}
private static class Printer {
public void print() {
System.out.println("print");
}
}
}
|
SpringFramework를 이용하여 @Bean 을 테스트 해 보았다.
개인적으로 조금 주의해서 봐야할 부분이 @Bean public Hello hello(Printer printer) 부분인것 같다. 언듯 보면 이 메소드의 인자로 Printer를 넘겨줘야 할 것 같지만 스프링이 알아서 타입에 맞는 클래스를 DI 시킨다. 따라서 리턴받은 Hello 클래스에는 Printer 클래스가 주입되어 있음을 확인할 수 있다.