반응형
- 객체가 아닌 데이터를 파일로 관리할 순 없을까?
- Properties 파일에서 의존성 주입은 어떻게 할까?
properties 파일 경로 지정
1. properties 파일 생성
service.prop1=10
service.prop2=10.5
service.prop3=false
service.prop4=문자열
2. Root Web Application Context의 설정을 담당하는 xml에 properties파일의 경로를 지정한다.
<context:property-placeholder location="classpath:properties/*.properties"/>
XML을 이용한 property 의존성 주입
Properties 값을 이용해 DI
index : 생성자에 여러 매개변수가 있을 경우, 매개변수의 순서를 지정
value = ${propertiesKey} : property-placeholder에 있는 자료 중 key에 해당하는 value값이 대입
<bean id="ch13Service5" class="com.mycompany.webapp.service.Ch13Service5">
<constructor-arg index="0" value="${service.prop1}"/>
<constructor-arg index="1" value="${service.prop2}"/>
<property name="prop3" value="${service.prop3}"/>
</bean>
public class Ch13Service5 {
private static final Logger logger = LoggerFactory.getLogger(Ch13Service5.class);
private int prop1;
private double prop2;
private boolean prop3;
public Ch13Service5(int prop1, double prop2) {
logger.info("실행");
logger.info("prop1: " + prop1);
logger.info("prop2: " + prop2);
}
public void setProp3(boolean prop3) {
logger.info("실행");
logger.info("prop3: " + prop3);
this.prop3 = prop3;
}
}
애너테이션을 이용한 property DI
@Value 어노테이션을 이용하여 Properties파일에 등록된 property값을 DI할 수 있다.
@PropertySource("classpath: ~ ") 어노테이션을 이용하여 properties 파일의 위치를 명시해준다.
생성자에 DI시, 정의된 기본 생성자가 없을 경우에는 Spring은 매개변수가 있는 생성자에 DI할 수 있는지 확인하고 할 수 있다면 해당 생성자를 사용한다.
@Service
@PropertySource("classpath:properties/ch13_di.properties")
public class Ch13Service6 {
private static final Logger logger = LoggerFactory.getLogger(Ch13Service6.class);
private int prop1;
private double prop2;
private boolean prop3;
//field
@Value("${service.prop4}") private String prop4;
//생성자
public Ch13Service6(
@Value("${service.prop1}") int prop1,
@Value("${service.prop2}") double prop2) {
logger.info("실행");
logger.info("prop1: " + prop1);
logger.info("prop2: " + prop2);
this.prop1 = prop1;
this.prop2 = prop2;
}
//Setter
@Value("${service.prop3}")
public void setProp3(boolean prop3) {
logger.info("실행");
logger.info("prop3: " + prop3);
this.prop3 = prop3;
}
}
반응형
'Spring > Spring' 카테고리의 다른 글
[Spring] Web Application Context 설정 (0) | 2022.05.10 |
---|---|
[Spring] @Autowired, @Resource, @Inject의 차이 (0) | 2022.04.26 |
[Spring] XML을 이용한 DI (0) | 2022.04.26 |
[Spring] 의존성과 의존성 주입 (Dependency & Dependency Injection) (0) | 2022.04.26 |
[Spring] IoC 제어 방식 (Inversion of Control) (0) | 2022.04.25 |