Class SpringBeanFactoryHolder

java.lang.Object
com.easydesk.spring.SpringBeanFactoryHolder
All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware

@Component public class SpringBeanFactoryHolder extends Object implements org.springframework.context.ApplicationContextAware
예전엔 Turbine 컨테이너 밖에서(리플렉션으로) 만든 객체에 @TurbineService/@TurbineConfiguration 필드를 채워 넣을 때 org.apache.turbine.annotation.AnnotationProcessor#process(Object) 를 썼다. 이 클래스는 그 자리를 대체한다 - Turbine 의 AnnotationProcessor 는 Turbine 자신의 서비스 컨테이너(TurbineServices/ServiceManager)와 설정 부트스트랩(Turbine.getConfiguration())에 강하게 결합돼 있어서 Turbine 을 걷어내면 같이 사라지는데, 이미 이 프로젝트는 Spring 을 쓰고 있으므로 Spring 이 표준으로 제공하는 AutowireCapableBeanFactory.autowireBean(Object) 와 Environment 로 똑같은 역할(각각 @TurbineService 자리 / @TurbineConfiguration 자리)을 대신할 수 있다. easydesk-spring-pipeline 의 XmlValveAdapter/DefaultPipelineService 는 이미 같은 목적으로 AutowireCapableBeanFactory 를 생성자로 주입받아 쓰고 있는데, 그건 그 객체들이 Spring 빈이라 생성자 주입이 가능하기 때문이다. 반면 WorkflowFactory.getInstance()/getInstanceImpl() 같은 static 진입점은 Spring 빈이 아니라서 생성자/필드로 주입받을 방법이 없다 - 이런 곳에서 쓰라고 만든 static 홀더다. autowire(Object) 는 @TurbineService 자리(이미 만들어진 일반 객체에 나중에 @Autowired 필드를 채워 넣는 것)를, getProperty(String, String) 는 @TurbineConfiguration 자리(설정값을 static 코드에서 읽는 것)를 대체한다. 주의: Spring 컨텍스트가 아직 뜨지 않은 상태(예: Spring 없이 순수 JUnit 단위 테스트에서 new 로 직접 생성해서 쓰는 경우)에서는 getBeanFactory()/getEnvironment() 가 null 을 반환한다 - autowire(Object) 는 이 경우 조용히 스킵하고(no-op), getProperty(String, String) 는 호출자가 넘긴 기본값을 그대로 돌려준다 - 둘 다 예전 "AnnotationProcessor/@TurbineConfiguration 호출 자체가 주석 처리돼 있던 것"과 동일하게 안전한 폴백이다. 컨텍스트가 뜬 뒤에는 이 클래스 자신이 @Component 로 스캔되면서 setApplicationContext(org.springframework.context.ApplicationContext) 가 호출되어 채워진다 - 스캔 대상에 com.easydesk.spring 패키지가 포함되어야 하며, 현재는 SecurityServiceConfig 의 @ComponentScan 목록에 com.easydesk.pipeline 과 함께 추가해뒀다 (전자는 이 클래스 자신, 후자는 DefaultPipelineService 빈을 살리기 위함 - 둘 다 지금까지는 데모 앱의 실제 컴포넌트 스캔 범위 밖에 있었다).
Author:
Youngho Cho
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    autowire(Object target)
    WorkflowFactory.getInstance(), AddItemValve/UpdateItemValve 처럼 리플렉션으로 이미 만들어진 객체에 @Autowired 필드를 채워 넣을 때 쓴다.
    static org.springframework.beans.factory.config.AutowireCapableBeanFactory
     
    static org.springframework.core.env.Environment
     
    static String
    getProperty(String key, String defaultValue)
    WorkflowFactory.EASYDESK_WORKFLOW_NAME_KEY 처럼, static 코드에서 Spring 설정값(예: application.properties)을 읽어야 할 때 쓴다.
    void
    setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SpringBeanFactoryHolder

      public SpringBeanFactoryHolder()
  • Method Details

    • setApplicationContext

      public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
      Specified by:
      setApplicationContext in interface org.springframework.context.ApplicationContextAware
    • getBeanFactory

      public static org.springframework.beans.factory.config.AutowireCapableBeanFactory getBeanFactory()
      Returns:
      현재 떠 있는 Spring 컨텍스트의 AutowireCapableBeanFactory. 컨텍스트가 아직 없으면 null.
    • getEnvironment

      public static org.springframework.core.env.Environment getEnvironment()
      Returns:
      현재 떠 있는 Spring 컨텍스트의 Environment. 컨텍스트가 아직 없으면 null.
    • autowire

      public static void autowire(Object target)
      WorkflowFactory.getInstance(), AddItemValve/UpdateItemValve 처럼 리플렉션으로 이미 만들어진 객체에 @Autowired 필드를 채워 넣을 때 쓴다. 예전 AnnotationProcessor.process(object) 호출을 그대로 대체하는 자리다.
      Parameters:
      target - 의존성을 채워 넣을, 이미 생성된 일반 객체 (null 이면 아무것도 하지 않는다)
    • getProperty

      public static String getProperty(String key, String defaultValue)
      WorkflowFactory.EASYDESK_WORKFLOW_NAME_KEY 처럼, static 코드에서 Spring 설정값(예: application.properties)을 읽어야 할 때 쓴다. 예전 @TurbineConfiguration(key) 필드 주입을 대체하는 자리다. Spring 컨텍스트가 없거나 키가 없으면 defaultValue 를 그대로 돌려준다.
      Parameters:
      key - Spring Environment 에 등록된 property key
      defaultValue - 컨텍스트가 없거나 키가 없을 때 돌려줄 기본값
      Returns:
      설정값, 없으면 defaultValue