2017-10-31 3 views
0

의 콩에 대한 요청 클래스의 정보를 얻을 수?다음과 같은 클래스를 고려 봄

+0

왜 그 정보를 필요? –

+0

@SotiriosDelimanolis 특별한 논리를 가진 logger를 위해 bean을 만들려고하는데, logger의 init은 로그를 출력 할 클래스가 필요하다. –

+0

어떤 클래스? 'B' 객체가 주입되기를 원하는 수백 개의 * beans가있을 수 있습니다. 메서드가 호출 될 때 Spring 컨테이너는 그 중 하나만 알고있다. 귀하의 질문에 대답하십시오 : ** 아니 **, 그것은 불가능합니다. – Andreas

답변

1

B이 로거이고 약 A을 알아야하는 경우 모든 로깅 프레임 워크가 작동하는 것과 비슷한 팩터 리 패턴을 사용해야합니다.

로깅 프레임 워크에는 일반적으로 하나의 글로벌 팩토리가 있습니다. Spring에서는 그러한 factory를 injection해야한다.

예 :

interface Logger { 
    void log(String message); 
} 

interface LoggerFactory { 
    Logger getLogger(Object context); 
} 

@Component 
class MyLoggerFactory implements LoggerFactory { 
    @Override 
    public Logger getLogger(Object context) { 
     return new Logger() { 
      @Override 
      public void log(String message) { 
       System.out.println(context.getClass().getSimpleName() + 
            " says '" + message + "'"); 
      } 
     } 
    } 
} 

@Component 
class A { 
    private Logger logger; 

    @Inject 
    public void setLogger(LoggerFactory factory) { 
     this.logger = factory.getLogger(this); 
    } 
} 
+0

아! 바보 나. 그래,이게 나를 위해 일한다. 감사! –

관련 문제