[SPRING] Spring 주석 @Autowired는 어떻게 작동합니까?
SPRINGSpring 주석 @Autowired는 어떻게 작동합니까?
@Autowired의 예를 보았습니다.
public class EmpManager {
@Autowired
private EmpDao empDao;
}
setter 메소드가없고 개인용이기 때문에 empDao가 어떻게 set을 얻는 지 궁금했습니다.
해결법
-
==============================
1.Java는 리플렉션 프레임 워크의 일부인 AccessibleObject.setAccessible () 메소드를 통해 필드 또는 메소드의 액세스 제어를 해제 할 수 있습니다 (예, 보안 검사가 먼저 전달됨) (Field 및 메소드 모두 AccessibleObject에서 상 속됨). 필드를 발견하고 기록 할 수 있으면 나머지 작업을 수행하는 것은 매우 간단합니다. 단순한 프로그래밍 문제 일뿐입니다.
Java는 리플렉션 프레임 워크의 일부인 AccessibleObject.setAccessible () 메소드를 통해 필드 또는 메소드의 액세스 제어를 해제 할 수 있습니다 (예, 보안 검사가 먼저 전달됨) (Field 및 메소드 모두 AccessibleObject에서 상 속됨). 필드를 발견하고 기록 할 수 있으면 나머지 작업을 수행하는 것은 매우 간단합니다. 단순한 프로그래밍 문제 일뿐입니다.
-
==============================
2.Java를 사용하면 리플렉션을 통해 클래스의 비공개 멤버와 상호 작용할 수 있습니다.
Java를 사용하면 리플렉션을 통해 클래스의 비공개 멤버와 상호 작용할 수 있습니다.
단위 테스트 작성에 매우 유용한 ReflectionTestUtils를 확인하십시오.
-
==============================
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.Spring은 CGLib API를 사용하여 자동 유선 의존성 주입을 제공합니다.
Spring은 CGLib API를 사용하여 자동 유선 의존성 주입을 제공합니다.
from https://stackoverflow.com/questions/3536674/how-does-spring-annotation-autowired-work by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] WebMvcConfigurationSupport와 WebMvcConfigurerAdapter의 차이점 (0) | 2019.08.16 |
---|---|
[SPRING] Spring Request Param에서 + (플러스)의 역 직렬화 (0) | 2019.08.15 |
[SPRING] 스프링 빈 초기화 시간을 계산할 수 있습니까? (0) | 2019.08.14 |
[SPRING] 스프링 데이터 JPA 기본 쿼리 건너 뛰기 잠김 (0) | 2019.08.14 |
[SPRING] 스프링 클라우드를 사용하여 유레카 서버의 기본 포트 변경 (0) | 2019.08.14 |