2012-10-04 5 views
0

@AutoWired는 UserController 생성자를 필요로 할 때 여기에 UserService 인스턴스를 삽입하도록 응용 프로그램 컨텍스트에 알려주기 때문에 이 필요합니까?@Autowired를 사용할 때 생성자를 정의해야합니까?

@Autowired 
private UserService service; 

public UserController(UserService service) { 
    this.service = service; 
} 

답변

1

을 자동 설정할 대한 Javadoc에 따르면, 주석은 "생성자 필드, 세터의 방법 또는 구성 방법"에 사용될 수있다.

가 가
@Controller 
public class MyControllear { 
    private final MyDao myDao; 

    @Autowired 
    public MyController(MyDao myDao) { 
     this.myDao = myDao; 
    } 
가 또한 코드없이 단위 테스트 클래스를 테스트 할 수 있습니다

생성자 주입은 그 사항에 따라 다릅니다 myDao 필드가 마지막으로 표시 할 수 있기 때문에

나는 개인적으로, 당신의 첫 번째 옵션 (생성자 주입을) 선호 봄. , 종속성은 스프링 프레임 워크에 의해 자동으로 주입됩니다

@Controller 
public class MyControllear { 
    @Autowired 
    private MyDao myDao; 

    MyController() { 
    } 
+0

"

두 번째 옵션은 더 나은로 기록 될 것이다. Constructor injection은 Spring에 의존하는 코드없이 유닛 테스트에서 클래스를 테스트 할 수있게 해줍니다. "이 예제를 제공 할 수 있습니까? –

1

호는 클래스에있는 패키지에 대한 주석 스캔을 사용할 수 있음을 제공

관련 문제