2024. 11. 14. 12:44ㆍSpring Framework/Spring IoC
Spring은 어노테이션 기반 구성에 대한 포괄적인 지원을 제공하며, 어노테이션을 클래스, 메서드 또는 필드 선언에 사용하여 컴포넌트 클래스 자체의 메타데이터로 작동합니다. 예를 들어, AutowiredAnnotationBeanPostProcessor 예제에서 언급한 것처럼, Spring은 BeanPostProcessor를 어노테이션과 함께 사용하여 핵심 IOC 컨테이너가 특정 어노테이션을 인식할 수 있도록 합니다.
예를 들어, @Autowired 어노테이션은 Autowiring Collaborators에서 설명된 것과 동일한 기능을 제공하지만, 더 세밀한 제어와 더 넓은 적용 범위를 가집니다. 또한, Spring은 @PostConstruct와 @PreDestroy와 같은 JSR-250 어노테이션에 대한 지원뿐만 아니라, jakarta.inject 패키지에 포함된 JSR-330 (Java용 의존성 주입) 어노테이션(@Inject 및 @Named)에 대한 지원도 제공합니다. 해당 어노테이션에 대한 자세한 내용은 관련 섹션에서 확인할 수 있습니다.
어노테이션 기반 주입은 외부 속성 주입보다 먼저 수행됩니다. 따라서 외부 구성(예: XML로 지정된 빈 속성)이 혼합 접근 방식을 통해 연결될 때, 속성에 대한 어노테이션을 효과적으로 덮어씁니다.
기술적으로, post-processor를 개별 빈 정의로 등록할 수 있지만, 이미 AnnotationConfigApplicationContext에서 암묵적으로 등록되어 있습니다.
XML 기반의 Spring 설정에서 어노테이션 기반 구성과 혼합하여 사용할 수 있도록 하려면 다음과 같은 설정 태그를 포함할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
<context:annotation-config/> 엘리먼트는 다음과 같은 post-processors를 암묵적으로 등록합니다:
- ConfigurationClassPostProcessor
- AutowiredAnnotationBeanPostProcessor
- CommonAnnotationBeanPostProcessor
- PersistenceAnnotationBeanPostProcessor
- EventListenerMethodProcessor
<context:annotation-config/> 엘리먼트는 정의된 동일한 애플리케이션 컨텍스트 내에서만 빈에 대한 어노테이션을 찾습니다. 이는 만약 DispatcherServlet의 WebApplicationContext에 <context:annotation-config/>를 넣으면, 컨트롤러 내의 @Autowired 빈만 확인하고 서비스는 확인하지 않는다는 것을 의미합니다. 자세한 내용은 DispatcherServlet을 참조하세요.
'Spring Framework > Spring IoC' 카테고리의 다른 글
Java-based Container Configuration (1) | 2024.11.14 |
---|---|
Fine-tuning Annotation-based Autowiring with Qualifiers (0) | 2024.11.14 |
Bean Scopes (0) | 2024.11.14 |
Method Injection (0) | 2024.11.14 |
Using depends-on, Lazy-initialized Beans, Autowiring Collaborators (0) | 2024.11.14 |