2013-08-22 1 views
0

호출 할 때로드되는 몇 가지 EJB (@Stateless로 주석 처리 됨)가 있습니다 (예 : 응용 프로그램 서버가 부팅 될 때 가 열심히로드되지 않음).로드 할 때 EJB를 가로채는 방법

일부 메소드에는 맞춤 메소드 주석이 포함되어 있으며 @Foo라고 할 수 있습니다.

내 응용 프로그램 서버 (AS) 이 부츠로 시작하고 @Foo로 주석이 달린 것을 찾으면 모든 것을 검사하는 방법을 찾고 싶습니다.

AS 부팅시 이라는 수명주기 리스너를 web.xml에 등록했습니다.

  • PS # 1 : 내 EJB를 처음 호출 될 때 @PostConstruct를 호출 내 AP 부팅 후 나중에에있을 수 있습니다.
  • PS # 2 : EJB가 JNDI에 등록 될 때 이벤트가 발생합니까?
  • PS # 3 : (이 EJB를이 봄으로 구성되어있는 경우 그 다음 당신이 스프링 빈 포스트 프로세서를 사용할 수 있습니다, 패키지
+0

@Foo는 CDI quailifer입니까? –

답변

0

에서 모든 클래스 를 스캔하도록 구성 할 때 일의 봄은 비슷한 무언가를 Spring이 스캔을 수행 할 때 사용하는 것).

@Component 
public class FooFinder implements BeanPostProcessor { 

    List<Method> fooMethods = new ArrayList<>(); 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     Class<?> targetClass = AopUtils.getTargetClass(bean); 
     for (Method method : targetClass.getDeclaredMethods()){ 
      for (Annotation annotation : AnnotationUtils.getAnnotations(method)){ 
       if (annotation instanceof Foo){ 
        fooMethods.add(method); 
       } 
      } 
     } 
     return bean; 
    } 

    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
     return bean; 
    } 
} 

경고 ... BeanPostProcessor에 종속성 주입에주의하십시오. BeanPostProcessors를 먼저 만들어야하기 때문에 Spring 의존성 그래프에 문제가 생길 수있다. 메소드를 다른 Bean에 등록해야 할 경우, BeanPostProcessor ApplicationContextAware 또는 BeanFactoryAware를 작성하여 Bean을 얻으십시오.

관련 문제