스프링 3.1부터 XML을 전혀 사용하지 않고도 스프링 애플리케이션을 만들 수 있게 됨
@ImportResource("xml") -> 자바 클래스로 만들어진 DI 설정 정보에서 XML의 설정 정보를 가져옴
<context:annotation-config> -> 에 의해 등록되는 빈 후처리기가 @PostConstruct 와 같은 애노테이션을 인식해 자동으로 메서드 실행
@Configuration -> 이 붙은 설정 클래스를 사용하는 컨테이너가 직접 @PostConstruct 애노테이션을 처리하는 빈 후처리기를 등록해줌
에 넣은 클래스는 굳이 public 이 아니어도 됨. 내부적으로 리플렉션 API를 이용하기 때문에 private로 접근을 제한해도 빈의 클래스로 사용할 수 있음
XML과 자바클래스를 동시에 DI정보로 사용하는 경우 자바 코드에서 XML에 정의한 빈을 사용하려면? - > @Autowired로 XML빈을 주입받으면 됨
@Resource 와 @Autowired 의 차이
@Resource 는 필드 이름을 기준으로 lookup
@Autowired 는 필드 타입을 기준으로 lookup
스프링 3.1부터 복잡한 로우 레벨의 빈을 등록해주는 전용 태그에 대응되는 애노테이션을 제공해줌
@Autowired 가 붙은 수정자 메서드가 있으면 파라미터 타입을 보고 주입해줌.
@Component 가 붙은 클래스는 빈 스캐너를 통해 자동으로 bean 으로 등록됨
@Component 는 빈으로 등록될 후보 클래스에 붙여주는 일종의 마커
메타 애노테이션 -> 애노테이션의 정의에 부여된 애노테이션
@Repository -> @Component 를 메타 애노테이션으로 갖고있음
스프링은 DAO기능을 제공하는 클래스에는 이걸 붙히도록 권장함
서비스 계층은 트랜잭션 경계가 되는 곳이라 @Transactional 이 함께 사용되는 경우가 많음
@Import -> 자바 클래스로 된 DI설정 정보를 가져올때 씀
@Profile("프로파일 이름") -> 현재 컨테이너의 활성 프로파일 목록에 자신의 프로파일 이름이 없으면 무시됨
@ActiveProfiles("프로파일 이름") -> 프로파일을 활성 프로파일로 사용하게 해줄 수 있음.
간단히 말해 @Profile("test") 라고 설정 클래스에 붙어있고
클래스에 @ActiveProfiles("test")가 붙어있으면 해당 설정이 적용됨.