본문 바로가기
✍ 따뜻한 개발 공부

[Spring] Environment객체 사용하지 않고 외부 프로퍼티 값 가져오기 / xml파일을 이용하는 방식과 java파일을 이용하는 방식

by 따따시 2022. 8. 4.

 

 

 

강사님께서 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가 생성한 빈 객체를 검색함

 

 

 

 

 

댓글