복붙노트

[SPRING] CDI의 InjectionPoint에 해당하는 Spring DI는 무엇입니까?

SPRING

CDI의 InjectionPoint에 해당하는 Spring DI는 무엇입니까?

누가 그것을 호출했는지 알 수있는 Spring의 bean 프로듀서 메소드를 만들고 싶습니다. 그래서 다음 코드로 시작했습니다 :

@Configuration
public class LoggerProvider {

    @Bean
    @Scope("prototype")
    public Logger produceLogger() {
        // get known WHAT bean/component invoked this producer 
        Class<?> clazz = ...

        return LoggerFactory.getLogger(clazz);
    }
}

콩을 주입시키고 자하는 정보를 어떻게 얻을 수 있습니까?

나는 봄 세계에서 CDI의 InjectionPoint와 비슷한 것을 찾고있다.

해결법

  1. ==============================

    1.제가 아는 한, 스프링은 그런 개념을 가지고 있지 않습니다.

    제가 아는 한, 스프링은 그런 개념을 가지고 있지 않습니다.

    그런 다음 처리되는 지점을 인식하는 것은 BeanPostProcessor입니다.

    예:

    @Target(PARAMETER)
    @Retention(RUNTIME)
    @Documented
    public @interface Logger {}
    
    public class LoggerInjectBeanPostProcessor implements BeanPostProcessor {   
        public Logger produceLogger() {
            // get known WHAT bean/component invoked this producer
            Class<?> clazz = ...    
            return LoggerFactory.getLogger(clazz);
        }
    
    
        @Override
        public Object postProcessBeforeInitialization(final Object bean,
                final String beanName) throws BeansException {
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(final Object bean,
                final String beanName) throws BeansException {
    
            ReflectionUtils.doWithFields(bean.getClass(),
                    new FieldCallback() {
                         @Override
                         public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException {
                             field.set(bean, produceLogger());
                         }
                    },
                    new ReflectionUtils.FieldFilter() {
                         @Override
                         public boolean matches(final Field field) {
                              return field.getAnnotation(Logger.class) != null;
                         }
                    });
    
            return bean;
        }
    }
    
  2. ==============================

    2.Spring 4.3.0은 bean 생성 메소드에 InjectionPoint와 DependencyDescriptor 매개 변수를 사용한다.

    Spring 4.3.0은 bean 생성 메소드에 InjectionPoint와 DependencyDescriptor 매개 변수를 사용한다.

    @Configuration
    public class LoggerProvider {
    
        @Bean
        @Scope("prototype")
        public Logger produceLogger(InjectionPoint injectionPoint) {
            Class<?> clazz = injectionPoint.getMember().getDeclaringClass();
    
            return LoggerFactory.getLogger(clazz);
        }
    }
    

    그건 그렇고,이 기능 SPR - 14033에 대한 문제는이 질문에 링크 블로그 게시물에 대한 의견에 링크.

  3. from https://stackoverflow.com/questions/9685316/what-is-the-spring-di-equivalent-of-cdis-injectionpoint by cc-by-sa and MIT license