반응형

  • 객체가 아닌 데이터를 파일로 관리할 순 없을까?
  • 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;
	}
}

반응형

+ Recent posts