DefaultListableBeanFactory (BeanFactory 상속) -> 대부분의 스프링 컨테이너는 이 클래스를 이용해 빈을 등록하고 관리함. @Autowired로 주입받을 수 있음. 컨테이너에 등록된 빈 이름, 정보 조회 가능
중첩 멤버 클래스를 프로파일 설정 클래스에 포함시키면 @Import 에 추가할 필요 없음
자바의 .properties -> 내부에 키=값 형태로 프로퍼티를 정의
스프링은 빈 설정 작업에 필요한 프로퍼티의 정보를 컨테이너가 관리하고 제공해줌.
프로퍼티 소스 -> 컨테이너가 값을 가져오는 대상
@PropertySource("...properties") -> 프로퍼티 소스 등록
Environment 를 주입받아 getProperty("키") 을 사용하면
프로퍼티의 값을 가져올 수 있음
@Value("${키}") -> @PropertySource 로 등록된 프로퍼티 소스의 키에 대한 값을 주입받음 (PropertySourcesPlaceholderConfigurer 를 빈으로 등록해야함. 빈으로 등록할때는 꼭 메서드가 static 이어야 함)
PropertySourcesPlaceholderConfigurer -> 프로퍼티 소스로부터 가져온 값을 @Value 필드에 주입하는 기능을 제공
@Configuration 애노테이션이 달린 빈 설정으로 사용되는 클래스도 빈으로 취급되기 때문에 @Autowired 이용 가능
@Configuration 도 @Component 를 메타 애노테이션으로 갖고있음
@Import(value=설정클래스) 도 다른 이름의 애노테이션으로 대체 가능
ex )
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement
7장 정리 (7장은 왤케 기냐..)
SQL처럼 변경될 수 있는 텍스트로 된 정보는 외부 리소스에 담아두고 가져오게 만들면 편하다.
성격이 다른 코드가 한데 섞여있는 클래스라면 먼저 인터페이스를 정의해서 코드를 각 인터페이스별로 분리하는게 좋다. 다른 인터페이스에 속한 기능은 인터페이스를 통해 접근하게 만들고 간단히 자기참조 빈으로 의존관계를 만들어 검증한다. 검증을 마쳤으면 아예 클래스를 분리해도 좋다.
자주 사용되는 의존 오브젝트는 디폴트로 미리 정의해두면 편리하다.
XML과 오브젝트 매핑은 스프링의 OXM 추상화 기능을 활용한다.
특정 의존 오브젝트를 고정시켜 기능을 특화하려면 멤버 클래스로 만드는 것이 편리하다. 기존에 만들어진 기능과 중복되는 부분은 위임을 통해 중복을 제거하는 게 좋다.
외부의 파일이나 리소스를 사용하는 코드에서는 스프링의 리소스 추상화와 리소스 로더를 사용한다.
DI를 의식하면서 코드를 작성하면 객체지향 설계에 도움이 된다.
DI는 인터페이스를 사용한다. 인터페이스를 사용하면 인터페이스 분리 원칙을 잘 지키는데도 도움이 된다.
클라이언트에 따라서 인터페이스를 분리할 때 새로운 인터페이스를 만드는 방법과 인터페이스를 상속하는 방법 두가지를 사용할 수 있다.
애플리케이션에 내장하는 DB를 사용할 때는 스프링의 내장형 DB 추상화 기능과 전용 태그를 사용하면 편리하다.