0

봄 @Autowired 나는 봄 @Autowired annotation.Please 도움말에 의심의 여지가봄 @Autowired annotaion

...

스프링 MVC에서

,이 순서 @Autowired를 시도 할 때

컨트롤러 ---> 서비스 --->은 다오

즉, 컨트롤러에서 나는 서비스에서 서비스 클래스 개체를 autowire 클래스 Autowire Dao 객체.

이 사출 체인은 완벽하게 작동합니다.

Similliarly strutrs2 + 봄에, 나는 이런 식으로 @Autowired 어노테이션을 적용

액션 ---> 서비스 -> 다오

이 주입 체인도 잘 작동합니다.

서비스 체인에서 funtion으로 (예 : Custom Taglib 클래스 (예 : Custom Taglib 클래스))이 체인 외부에서 funtion을 호출하면이 서비스 클래스에서 Autowired dao 객체가 null입니다 (즉,이 호출은 체인을 멈추게합니다).

내 질문

이 @Autowired가 만 주입 체인에서 작동된다?

답변

1

@Autowire d 개의 필드는 Spring Bean Postprocessor를 통해 전송 된 경우에만 설정됩니다. 즉, 사용자가 직접 autowire하는 경우에 말했던 것처럼 말입니다. 이는 생성자 주입이 필드 주입보다 훨씬 더 큰 이유입니다. 당신은 당신이 당신의 경우와 같이 (후 처리로 서비스에 의존 할 수없는 상황에있을 때 대신

@Service 
public class MyService { 
    @Autowired 
    private MyDao dao; 

    ... 
} 

을하고 당신은 그 방법

@Service 
public class MyService { 
    private final MyDao dao; 

    @Autowired 
    public MyService(MyDao dao) { 
     this.dao = dao; 
    } 
} 

을 수행해야합니다 jsp 태그 라이브러리를 사용하여), MyDao 객체를 가진 새로운 인스턴스를 간단하게 인스턴스화 할 수 있고 즐겁게 할 수 있습니다.

+0

답장을 보내 주셔서 대단히 감사합니다. 그러나 Theory에서는 스프링 appliCationContext가 시작될 때로드되고 모든 bean이로드되고 모든 것이 live입니다. 그렇다면 bean이 실행 중인데도 Autowired injection 작업이 실패한 이유는 무엇입니까? – SRK

+0

질문은, 당신이 호출하고있는 함수 (예를 들어 커스텀 taglib 클래스 메소드)가 * 호출중인 서비스 빈의 인스턴스를 얻는 방법은 무엇입니까? 'new MyService()'라고 말하면, postprocessor를 거치지 않았기 때문에 필드가 삽입되지 않습니다. 삽입 된 필드는 정적이 아니기 때문에 applicationContext는 클래스 자체를 autowire하지 않습니다. 인스턴스에 삽입되므로 내 taglib가 호출 할 서비스 인스턴스를 autowiring하지 않습니다. 하나의 인스턴스를 인스턴스화합니다. –

+0

너 right.my taglib 클래스는 새로운 Myservice()를 사용하지만, taglib 클래스는 지원되지 않습니다. [link] (http://stackoverflow.com/questions/28304546/enable-jsp-custom-taglib-to-use-spring- 서비스 빈). – SRK