Spring 주석 @AutoWired는 어떻게 작동합니까?
의 예를 우연히 발견했습니다.@Autowired
:
public class EmpManager {
@Autowired
private EmpDao empDao;
}
나는 어떻게 그것이.empDao
setter 메서드가 없고 비공개이므로 집합을 가져옵니다.
Java는 반사 프레임워크의 일부인 메서드를 통해 필드 또는 메서드의 액세스 제어를 해제할 수 있습니다(예, 먼저 통과하는 보안 검사가 있습니다).Field
그리고.Method
에서 물려받은.AccessibleObject
일단 필드를 발견하고 쓸 수 있게 되면, 나머지를 수행하는 것은 아주 사소한 일입니다. 단순한 프로그래밍 문제에 불과합니다.
Java를 사용하면 반영을 통해 클래스의 개인 구성원과 상호 작용할 수 있습니다.
체크아웃 리플렉션TestUtils는 단위 테스트를 작성하는 데 매우 편리합니다.
어떤 세터도 필요하지 않습니다. 당신은 단지 선언하기만 하면 됩니다.EmpDao
주석이 달린 클래스@component
Spring이 애플리케이션 컨텍스트에 포함된 구성 요소의 일부로 식별하기 위해 ...
두 가지 솔루션이 있습니다.
- XML 파일 applicationContext에서 수동으로 콩을 선언하는 방법
<bean class="package.EmpDao" />
- 컨텍스트 파일에서 다음 행을 확인하여 자동 탐지를 사용하려면 다음과 같이 하십시오.
<context:component-scan base-package="package" />
<context:annotation-config />
그리고 스프링 주석을 사용하여 스프링 컨테이너가 구성 요소로 관리할 클래스를 선언합니다.
@Component
class EmpDao {...}
AND로 참조에 주석을 추가합니다.@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();
}
...
}
자동 배선은 한 빈의 인스턴스를 다른 빈의 인스턴스의 원하는 필드에 배치하여 수행됩니다.두 클래스 모두 빈이여야 합니다. 즉, 애플리케이션 컨텍스트에서 사용하도록 정의해야 합니다.
봄은 콩의 존재를 알고 있습니다.EmpDao
그리고.MyClass
자동으로 인스턴스화합니다.EmpDao
에MyClass
.
Spring은 CGLib API를 사용하여 자동 배선 종속성 주입을 제공합니다.
레퍼런스
추가 읽기
언급URL : https://stackoverflow.com/questions/3536674/how-does-spring-annotation-autowired-work
'programing' 카테고리의 다른 글
Ajax를 사용하여 base64 이미지 업로드 (0) | 2023.08.28 |
---|---|
SQL Server: OLE DB 공급자 "Microsoft"의 데이터 원본 개체를 초기화할 수 없습니다.연결된 서버용 ACE.OLEDB.12.0"(null) (0) | 2023.08.28 |
PHP 페이지에 대한 직접 액세스 금지 (0) | 2023.08.28 |
Spring IDE 플러그인이 있는 Eclipse와 Spring Tool Suite의 차이점은 무엇입니까? (0) | 2023.08.28 |
jQuery 아약스 업로드(진행 표시줄 포함) - 플래시 없음 (0) | 2023.08.28 |