- dispatcher-servlet.xml파일에 의존성 주입을 해 사용할 수 있다
- PreferencesPlaceholderConfigurer는 Spring 프레임워크에서 제공하는 클래스로, ${...} 형식의 placeholder를 사용하여 프로퍼티 파일이나 환경 변수로부터 값을 주입할 수 있는 기능을 제공한다.
- 이 bean은 dispatcher-servlet.xml 파일에 정의되어, 해당 Spring 애플리케이션 컨텍스트에서 사용되는 다른 bean들이 환경 변수나 프로퍼티 파일에 정의된 값을 참조할 수 있도록 한다.
- 일반적으로 데이터베이스 연결 정보, API 키, 서버 포트 번호 등과 같이 환경에 따라 변경되어야 하는 설정 값들을 프로퍼티 파일이나 환경 변수에 정의하고, PreferencesPlaceholderConfigurer를 통해 해당 값들을 bean에 주입할 수 있다.
<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location" value="classPath:config.properties"></property>
<property name="fileEncoding" value="UTF-8"></property>
</bean>
@Component
- @Component는 Spring의 특별한 어노테이션 중 하나로, 이 어노테이션을 사용하면 해당 클래스가 Spring에 의해 자동으로 관리되는 Bean으로 등록된다.
- Spring은 이 어노테이션이 붙은 클래스들을 스캔하여 자동으로 Bean으로 등록하므로, 개발자가 별도의 설정 없이도 Bean을 사용할 수 있다.
@PostConstruct
- @PostConstruct는 Java EE에서 제공하는 어노테이션으로, 이 어노테이션이 붙은 메서드는 Bean이 초기화된 직후에 실행된다.
- 이를 통해 Bean이 생성된 직후 리소스 초기화 등의 작업을 수행할 수 있다.
- 단, Java 9 이후 버전에서 Java EE가 deprecated되어 별도의 의존성을 추가해야 한다.
@PostConstruct 를 사용하는 이유
@PostConstruct 메서드는 Bean 인스턴스화 및 의존성 주입이 완료된 후에 실행된다. 이를 통해 Bean의 완전한 초기화와 준비 작업을 수행할 수 있다. 예를 들어:
- 데이터베이스 연결 설정과 같은 초기화 작업을 수행할 수 있다.
- 초기 데이터 로딩이나 구성 설정 등을 처리할 수 있다.
- 생성자에서는 의존성이 주입되지 않은 상태이므로 이러한 초기화 작업을 수행할 수 없다. 따라서 생성자보다는 @PostConstruct 메서드를 사용하는 것이 더 안전하고 적절한 방법이다.
- 또한 @PostConstruct 메서드는 Bean의 생명주기 동안 단 한 번만 호출되므로, 초기화 작업을 안전하게 수행할 수 있다. 이를 이용해 DBFactory.java의 properties를 일원화할 수 있었다
properties 일원화 관련 코드
[기존]
private static final String user = 유저이름
private static final String passwdEnv = 운영서버 비밀번호
[변경]
@Component
public class DBFactory {
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
private static String dbUrl;
private static String user;
private static String passwdEnv;
public DBFactory() {}
@PostConstruct
public void setProperties() {
dbUrl = jdbcUrl;
user = jdbcUsername;
passwdEnv = jdbcPassword;
}
}