✍ 따뜻한 개발 공부
[Spring] Environment객체 사용하지 않고 외부 프로퍼티 값 가져오기 / xml파일을 이용하는 방식과 java파일을 이용하는 방식
따따시
2022. 8. 4. 13:15
강사님께서 java파일만을 이용하여 스프링 설정을 하는 방법을
추천하진 않는다고 하셨지만, 그 차이를 알고 있어야 하니 정리해보자궁~?
1. xml파일을 사용하여 프로퍼티 파일 명시 방법
먼저, applicationCTX.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 얘를 사용하려면 nameplace에 가서 context를 체크해주어야 한다. -->
<!-- 외부 파일에서 데이터를 가져오는 것 -->
<context:property-placeholder location="classpath:admin.properties, classpath:sub_admin.properties" />
<bean id="adminConnection" class="com.javalec.ex.AdminConnection" >
<property name="adminId">
<value>${admin.id}</value> <!--직접 value값에 입력하지 않고 외부에 있는(admin.properties/sub_admin.properties) 값을 가져오겠다. -->
</property>
<property name="adminPw">
<value>${admin.pw}</value>
</property>
<property name="sub_adminId">
<value>${sub_admin.id}</value>
</property>
<property name="sub_adminPw">
<value>${sub_admin.pw}</value>
</property>
</bean>
</beans>
😛 중요 뽀인트
1. nameplace에서 아래 태그를 수행하기 위하여 context를 체크해준다 ✔️
<context:property-placeholder location="classpath:프로퍼티 파일이름"/>
2. 직접 value에 값을 넣지 않고, ${}를 사용하여 외부 프로퍼티 값을 가져오기
<메인 클래스에서 값을 호출한 모습>
package com.javalec.ex;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
AdminConnection connection = ctx.getBean("adminConnection", AdminConnection.class);
System.out.println("adminID : " + connection.getAdminId());
System.out.println("adminPW : " + connection.getAdminPw());
System.out.println("sub_adminID : " + connection.getSub_adminId());
System.out.println("sub_adminPW : " + connection.getSub_adminPw());
ctx.close();
}
}
😛 중요 뽀인트
1. AbstractApplicationContext
DI 작업을 수행하는 스프링 컨테이너를 생성하는 작업
xml 파일을 보고 스프링 컨테이너 객체를 생성하는 것!! (DI를 어떻게 할 것인지 xml파일을 보고 아는 것)
2. java파일 안에 프로퍼티 파일 명시 방법
<java 파일에 직접 값을 넣은 코드>
package com.javalec.ex;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
//자바 파일에 직접 설정할때는 applicatioCTX 이용하지 않고 아래와 같이 java파일에 어노테이션을 사용하여 값 세팅해주기
@Configuration
public class ApplicationConfig {
//이것도 외부에서 가져오는 방식!
@Value("${admin.id}")
private String adminId;
@Value("${admin.pw}")
private String adminPw;
@Value("${sub_admin.id}")
private String sub_adminId;
@Value("${sub_admin.pw}")
private String sub_adminPw;
@Bean
public static PropertySourcesPlaceholderConfigurer Properties() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
Resource[] locations = new Resource[2];
locations[0] = new ClassPathResource("admin.properties");
locations[1] = new ClassPathResource("sub_admin.properties");
configurer.setLocations(locations);
return configurer;
}
@Bean
public AdminConnection adminConfig() {
AdminConnection adminConnection = new AdminConnection();
adminConnection.setAdminId(adminId);
adminConnection.setAdminPw(adminPw);
adminConnection.setSub_adminId(sub_adminId);
adminConnection.setSub_adminPw(sub_adminPw);
return adminConnection;
}
}
@Configuration
해당 클래스를 스프링 설정 클래스로 지정
@Bean
해당 메소드가 생성한 객체를 스프링이 관리하는 빈 객체로 등록
<메인클래스 코드>
package com.javalec.ex;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
AdminConnection connection = ctx.getBean("adminConfig", AdminConnection.class);
System.out.println("adminID : " + connection.getAdminId());
System.out.println("adminPW : " + connection.getAdminPw());
System.out.println("sub_adminID : " + connection.getSub_adminId());
System.out.println("sub_adminPW : " + connection.getSub_adminPw());
ctx.close();
}
}
😛 중요 뽀인트
1. AnnotationConfigApplicationContext
아까 세팅해놓은 java 파일에서 값을 가져와 bean 객체를 생성
2. getBean()
AnnotationConfigApplicationContext가 생성한 빈 객체를 검색함