복붙노트

[SPRING] Spring 주석 @Autowired는 어떻게 작동합니까?

SPRING

Spring 주석 @Autowired는 어떻게 작동합니까?

@Autowired의 예를 보았습니다.

public class EmpManager {
   @Autowired
   private EmpDao empDao;
}

setter 메소드가없고 개인용이기 때문에 empDao가 어떻게 set을 얻는 지 궁금했습니다.

해결법

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

    1.Java는 리플렉션 프레임 워크의 일부인 AccessibleObject.setAccessible () 메소드를 통해 필드 또는 메소드의 액세스 제어를 해제 할 수 있습니다 (예, 보안 검사가 먼저 전달됨) (Field 및 메소드 모두 AccessibleObject에서 상 속됨). 필드를 발견하고 기록 할 수 있으면 나머지 작업을 수행하는 것은 매우 간단합니다. 단순한 프로그래밍 문제 일뿐입니다.

    Java는 리플렉션 프레임 워크의 일부인 AccessibleObject.setAccessible () 메소드를 통해 필드 또는 메소드의 액세스 제어를 해제 할 수 있습니다 (예, 보안 검사가 먼저 전달됨) (Field 및 메소드 모두 AccessibleObject에서 상 속됨). 필드를 발견하고 기록 할 수 있으면 나머지 작업을 수행하는 것은 매우 간단합니다. 단순한 프로그래밍 문제 일뿐입니다.

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

    2.Java를 사용하면 리플렉션을 통해 클래스의 비공개 멤버와 상호 작용할 수 있습니다.

    Java를 사용하면 리플렉션을 통해 클래스의 비공개 멤버와 상호 작용할 수 있습니다.

    단위 테스트 작성에 매우 유용한 ReflectionTestUtils를 확인하십시오.

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

    3.Spring이 ApplicationContext에 포함 된 구성 요소의 일부로 식별하기 위해 @set 주석을 사용하여 클래스 EmpDao를 선언하면됩니다.

    Spring이 ApplicationContext에 포함 된 구성 요소의 일부로 식별하기 위해 @set 주석을 사용하여 클래스 EmpDao를 선언하면됩니다.

    두 가지 해결책이 있습니다.

    <컨텍스트 : component-scan base-package = "package"/>

    <문맥 : 주석-구성 />

    스프링 주석을 사용하여 스프링 컨테이너가 컴포넌트로 관리 할 클래스를 선언하십시오.

    전의:

    @Component
    class EmpDao {...}
    

    그리고 @Autowired로 참조에 주석을 달려면 :

    @Component (or @Controller, or @Service...)
    class myClass {
    
    // tells the application context to inject an instance of EmpDao here
    @Autowired
    EmpDao empDao;
    
    
    public void useMyDao()
    {
        empDao.method();
    }
    ...
    }
    

    자동 배선은 한 Bean의 인스턴스를 다른 Bean 인스턴스의 원하는 필드에 배치하여 발생합니다. 두 클래스는 모두 Bean이어야합니다. 즉, 애플리케이션 컨텍스트에 따라 정의되어야합니다.

    Spring은 Bean EmpDao와 MyClass의 존재를 알고 있으며 MyClass에서 EmpDao 인스턴스를 자동으로 인스턴스화합니다.

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

    4.Spring은 CGLib API를 사용하여 자동 유선 의존성 주입을 제공합니다.

    Spring은 CGLib API를 사용하여 자동 유선 의존성 주입을 제공합니다.

  5. from https://stackoverflow.com/questions/3536674/how-does-spring-annotation-autowired-work by cc-by-sa and MIT license