@Lookup

Yuno·2024년 8월 17일
0

Spring Framework 에서 의존성 주입의 특별한 형태를 처리할 때 사용됨.
주로 prototype 스코프 빈을 singleton 스코프의 빈에 주입하고자 할 때 사용됨.
@Lookup 을 사용하면, 매번 주입 시마다 새로운 prototype 빈 인스턴스를 반환할 수 있음.


📌 주요 특징

  1. 동적 빈 조회
  • @Lookup 어노테이션은 메서드에 붙여서 사용됨
  • Spring이 해당 메서드를 오버라이드하여, 요청 시마다 지정된 타입의 빈을 반환하는 메서드를 자동으로 생성
  1. prototype 빈 주입
  • 보통 singleton 빈에 prototype 빈을 주입하려고 할 때 발생하는 문제를 해결하기 위해 사용함.
    일반적으로 Spring 은 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();
    }
}

👉 동작 방식

  1. @Lookup 이 붙은 메서드는 실제로는 구현되지 않음. 대신, Spring이 런타임에 이 메서드를 오버라이드 하여 지정된 빈을 반환하는 코드를 생성.
  2. 호출 시마다 Spring 컨테이너에서 새로운 prototype 빈을 가져와서 반환

예를들어, MySingletonBean 클래스가 singleton 스코프로 설정되어 있고, 이 클래스에서 사용하는 MyPrototypeBeanprototype 스코프로 설정되어 있다고 가정하면,

@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();
    }
}

MySingletonBeandoSomething() 메서드를 호출할 때마다 새로운 MyPrototypeBean 인스턴스가 생성됨

profile
Hello World

0개의 댓글