Spring Framework 에서 의존성 주입의 특별한 형태를 처리할 때 사용됨.
주로prototype스코프 빈을singleton스코프의 빈에 주입하고자 할 때 사용됨.
@Lookup을 사용하면, 매번 주입 시마다 새로운prototype빈 인스턴스를 반환할 수 있음.
@Lookup 어노테이션은 메서드에 붙여서 사용됨prototype 빈 주입singleton 빈에 prototype 빈을 주입하려고 할 때 발생하는 문제를 해결하기 위해 사용함.singleton 빈을 생성할 때 prototype 빈도 함께 생성하여 주입함.@Lookup 을 사용하면 매번 새로운 pototype 빈 인스턴스를 생성할 수 있음.@Lookup 은 메서드 레벨에서 사용되며, 주입할 빈 타입을 메서드의 반환 타입으로 설정함. Spring은 해당 메서드를 호출할 때마다 새로운 prototype 빈을 반환.
@Component
public static MySingletonBean {
@Lookup
public MyprototypeBean getMyPrototypeBean() {
/*
Spring이 이 메서드를 오버라이드 하여,
프로토타입 빈을 반환하는 코드를 자동으로 생성
*/
return null; // 이 코드는 실제로 실행되지 않으며, Spring에 의해 무시됨
}
public void doSomething() {
MyPrototypeBean prototypeBean = getMyPrototypeBean();
prototypeBean.performTask();
}
}
@Lookup 이 붙은 메서드는 실제로는 구현되지 않음. 대신, Spring이 런타임에 이 메서드를 오버라이드 하여 지정된 빈을 반환하는 코드를 생성.prototype 빈을 가져와서 반환예를들어, MySingletonBean 클래스가 singleton 스코프로 설정되어 있고, 이 클래스에서 사용하는 MyPrototypeBean 은 prototype 스코프로 설정되어 있다고 가정하면,
@Socpe("prototype")
public class MyPrototypeBean {
public void performTask() {
System.out.println("Prototype Bean Task");
}
}
@Component
public class MySingletonBean {
@Lookup
public MyprototypeBean getMyPrototypeBean() {
return null;
}
public void doSometing() {
MyPrototypeBean prototypeBean = getMyPrototypeBean();
prototypeBean.performTask();
}
}
MySingletonBean 의 doSomething() 메서드를 호출할 때마다 새로운 MyPrototypeBean 인스턴스가 생성됨