복붙노트

[SPRING] Spring을 사용하여 동일한 클래스를 주입 할 수 있습니까?

SPRING

Spring을 사용하여 동일한 클래스를 주입 할 수 있습니까?

나는 클래스를 Service를 구현하고 Service StereoType으로 주석 처리 된 UserService라고 말하고 Spring AOP를 사용하고 있으며 임시 해결 방법을 원한다. (더 좋은 방법으로 할 수 있음을 알고있다.)

@Service
public class UserService implements Service{
   @Autowired
   private Service self;
}

나는 이것을 시도했지만 BeanNotFoundException을 얻었는데, 나는 무엇을 놓쳤는가?

@Configurable을 사용하여 AspectJ와 함께 가야한다는 것을 알고 있지만 임시 해결 방법은 거의 찾고 있지 않다.

해결법

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

    1.왜 지구상에서 이것을해야할까요? 현재 인스턴스 (예 : 자기)를 참조해야하는 모든 메소드에서 this 키워드를 사용하면됩니다.

    왜 지구상에서 이것을해야할까요? 현재 인스턴스 (예 : 자기)를 참조해야하는 모든 메소드에서 this 키워드를 사용하면됩니다.

    우리가 뭔가를 놓치고 있습니까? 당신이하려는 다른 일이 있다면, 질문을 명확히 해보자. 그러면 우리는 그것을 찔러 보게 될 것이다.

    빈이 완전히 만들어 질 때까지 빈을 주입 할 수 없기 때문에 이것이 작동하지 않는다는 것을 의아해 할 것입니다 -> 이것은 Spring의 모든 프로퍼티를 주입해야한다는 것을 의미합니다. 실제로 Spring이 빈을 인스턴스화하려고 시도 할 때 순환 종속성이 생성되고, 그렇게되면 다른 빈을 Autowire 할 필요가 있음을 발견하게됩니다. Bean을 찾을 때 Bean이 초기화 된 Bean 목록에 추가되지 않았기 때문에 (현재 초기화 중이기 때문에) 시작할 수 없습니다. 말이 돼? Bean을 초기화 할 수 없으므로 BeanNotFoundException이 발생합니다.

  2. ==============================

    2.수업 내용을 수정할 수 있습니다.

    수업 내용을 수정할 수 있습니다.

    @Service
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON, proxyMode = ScopedProxyMode.INTERFACES)
    public class UserService implements Service
    {
        @Autowired
        private Service self;
    }
    

    이게 효과가있다.

  3. ==============================

    3.이 질문에 꽤 대답하지 않는 것을 알고 있지만 코드를 다시 작성하여 자체 호출에 적용되는 측면에 의존 할 필요가 없도록 제안합니다. 예를 들어, 일부 트랜잭션 메소드가있는 경우, 트랜잭션 메소드가 호출 메소드에서 올바르게 설정되었는지 확인하십시오.

    이 질문에 꽤 대답하지 않는 것을 알고 있지만 코드를 다시 작성하여 자체 호출에 적용되는 측면에 의존 할 필요가 없도록 제안합니다. 예를 들어, 일부 트랜잭션 메소드가있는 경우, 트랜잭션 메소드가 호출 메소드에서 올바르게 설정되었는지 확인하십시오.

    정말로 필요한 경우에는 클래스 ApplicationContextAware를 만들고 컨텍스트에서 bean-with-aspect를 가져올 수 있습니다

  4. ==============================

    4.이것은 잘 작동합니다 -

    이것은 잘 작동합니다 -

    @Service(value = "someService")
    public class UserService implements Service{
       @Resource(name = "someService")
       private Service self;
    }
    
  5. from https://stackoverflow.com/questions/5107505/can-i-inject-same-class-using-spring by cc-by-sa and MIT license