복붙노트

[SPRING] @Autowired 주석은 속성 또는 메소드로 이동해야합니다.

SPRING

@Autowired 주석은 속성 또는 메소드로 이동해야합니다.

어느 것이 더 정확합니까?

이 메소드 (@Autowired 어노테이션과 함께)?

@Controller
public class MyController
{
    private MyDao myDao;

    @Autowired
    public MyController(MyDao myDao)
    {
        this.myDao = myDao;
    }

이 속성 (속성의 @Autowired 주석 포함)?

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

    public MyController(MyDao myDao)
    {
        this.myDao = myDao;
    }

@Autowired 주석은 어디에 있어야하나요?

해결법

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

    1.Autowired 용 Javadoc에 따르면, 주석은 "생성자, 필드, 설정 메소드 또는 구성 메소드"에서 사용될 수 있습니다. 자세한 내용은 전체 설명서를 참조하십시오.

    Autowired 용 Javadoc에 따르면, 주석은 "생성자, 필드, 설정 메소드 또는 구성 메소드"에서 사용될 수 있습니다. 자세한 내용은 전체 설명서를 참조하십시오.

    개인적으로 myDao 필드를 final로 표시 할 수 있으므로 첫 번째 옵션 (생성자 삽입)을 선호합니다.

    @Controller
    public class MyControllear {
        private final MyDao myDao;
    
        @Autowired
        public MyController(MyDao myDao) {
          this.myDao = myDao;
        }
    

    생성자 삽입을 사용하면 Spring에 의존하는 코드없이 단위 테스트에서 클래스를 테스트 할 수 있습니다.

    두 번째 옵션은 다음과 같이 작성하는 것이 좋습니다.

    @Controller
    public class MyControllear {
        @Autowired
        private MyDao myDao;
    
        MyController() {
        }
    

    필드 주입을 사용하면 Spring은 객체를 생성 한 다음 주입을 위해 표시된 필드를 업데이트합니다.

    당신이 언급하지 않은 한 가지 옵션은 @Autowired를 setter 메소드 (setter injection)에 두는 것입니다.

    @Controller
    public class MyControllear {
        private MyDao myDao;
    
        MyController() {
        }
    
        @Autowired
        public void setMyDao(MyDao myDao) {
          this.myDao = myDao;
        }
    

    당신은 하나 또는 다른 것을 선택할 필요가 없습니다. 필드 삽입을 일부 종속성에 대해 사용하고 생성자 주입을 다른 객체에 대해 동일한 객체에 사용할 수 있습니다.

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

    2.어설 션은 속성과 함께 사용됩니다. 자동적으로 설정되는 프롭퍼티 이 자습서에는 좋은 예가 있습니다. 이 고급 예제는 한정자를 사용하여 배선을 모호하게 만드는 방법을 보여줍니다.

    어설 션은 속성과 함께 사용됩니다. 자동적으로 설정되는 프롭퍼티 이 자습서에는 좋은 예가 있습니다. 이 고급 예제는 한정자를 사용하여 배선을 모호하게 만드는 방법을 보여줍니다.

  3. from https://stackoverflow.com/questions/3746574/where-is-the-autowired-annotation-supposed-to-go-on-the-property-or-the-metho by cc-by-sa and MIT license