프로그래밍 정리/Spring

Spring - Environment객체(Property값 가져오기)

Wooni0477 2019. 12. 9. 14:29
반응형

Spring - Environment객체(Property값 가져오기)


-Environment객체는 하나의 어플리케이션에, 딱 한번만 선언이 가능하다.

그 이후 만든 객체는 같은 객체라고 봐도 무방하다.




활용1 - Property 파일


1.  Property 값 가져오기


다음과 같이 properties 파일의 값들을 가져오는 방법을 알아보자


admin.properties 파일

1
2
admin.id=abcde
admin.pw=12345
cs




2. Environment 객체 만들기

1. Context 객체 생성

2. Context 메소드 사용 -> Environment 객체를 가져온다.

3. Environment객체를 이용하여 PropertySource를 가져온다.



1
2
3
ConfigurableApplicationContext ctx = new GenericXmlApplicationContext(); //Context 객체생성
ConfigurableEnvironment env = ctx.getEnvironment(); //Environment객체 가져옴
MutablePropertySources propertySources = env.getPropertySources(); //PropertySource 가져옴
cs




3. Environment 객체를 이용해 가져오기



1
2
3
4
5
6
7
try 
{
    propertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
            
    System.out.println( env.getProperty("admin.id") );
    System.out.println( env.getProperty("admin.pw") );
catch (IOException e) {}
cs








활용2 - Bean



1.  이미 선언된 Environment 객체 가져오기


-AdminConnection.java


 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class AdminConnection implements EnvironmentAware{ //EnvironmentAware 인터페이스를 선언하면 setEnvironment메소드 사용가능
 
    private Environment env;
    private String adminId;
    private String adminPw;
 
    @Override
    public void setEnvironment(Environment env) {         //생성자 실행 후 바로 이어서 실행되는 메서드
        System.out.println("setEnvironment()");
        setEnv(env);                                      //현재 생성된 Environment 객체를 가져와 집어넣는다.
    }                                                         //└Environment 객체는 하나의 어플리케이션에, 한번만 생성됨.
    
    public void setEnv(Environment env) {
        this.env = env;                                   //불러온 객체를 AdminConnection 클레스의 Environment에 setter
    }
 
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet()");
        setAdminId(env.getProperty("admin.id")); //가져온 Environment 객체를 이용해 admin.id 값을 넣는다.
        setAdminPw(env.getProperty("admin.pw")); //가져온 Environment 객체를 이용해 admin.pw 값을 넣는다.
    }
}
cs
 




-applicationCTX.xml

Bean을 이용한 객체선언

1
<bean id="adminConnection" class="com.javalec.ex.AdminConnection" />
cs



-main

기본 컨테이너 생성

※컨테이너 생명주기 글 참고(https://cloud0477.tistory.com/60)


  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
ConfigurableEnvironment env = ctx.getEnvironment();
MutablePropertySources propertySources = env.getPropertySources();
 
try 
{
    propertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
catch (IOException e) {}
 
GenericXmlApplicationContext gCtx = (GenericXmlApplicationContext)ctx;
gCtx.load("applicationCTX.xml");
gCtx.refresh();
 
AdminConnection adminConnection = gCtx.getBean("adminConnection", AdminConnection.class);
 
gCtx.close();
ctx.close();
cs
















-------------------------------------------------------------모든소스-------------------------------------------------------------------


-MainClass.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.javalec.ex;
 
import java.io.IOException;
 
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.io.support.ResourcePropertySource;
 
 
public class MainClass {
 
    public static void main(String[] args) {
        
        ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
        ConfigurableEnvironment env = ctx.getEnvironment();
        MutablePropertySources propertySources = env.getPropertySources();
        
        try {
            propertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
            
            System.out.println( env.getProperty("admin.id") );
            System.out.println( env.getProperty("admin.pw") );
        } catch (IOException e) {}
        
        GenericXmlApplicationContext gCtx = (GenericXmlApplicationContext)ctx;
        gCtx.load("applicationCTX.xml");
        gCtx.refresh();
        
        AdminConnection adminConnection = gCtx.getBean("adminConnection", AdminConnection.class);
        System.out.println("admin ID : " + adminConnection.getAdminId());
        System.out.println("amdin PW : " + adminConnection.getAdminPw());
        
        gCtx.close();
        ctx.close();
        
    }
    
}
cs



-AdminConnection.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.javalec.ex;
 
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
 
public class AdminConnection implements EnvironmentAware, InitializingBean, DisposableBean {
 
    private Environment env;
    private String adminId;
    private String adminPw;
    
    public AdminConnection()
    {
        System.out.println("AdminConnection 생성자");
    }
    
    @Override
    public void setEnvironment(Environment env) {
        System.out.println("setEnvironment()");
        setEnv(env);
    }
    
    public void setEnv(Environment env) {
        this.env = env;
    }
    
    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }
    
    public void setAdminPw(String adminPw) {
        this.adminPw = adminPw;
    }
    
    public String getAdminId() {
        return adminId;
    }
    
    public String getAdminPw() {
        return adminPw;
    }
    
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet()");
        setAdminId(env.getProperty("admin.id"));
        setAdminPw(env.getProperty("admin.pw"));
    }
 
    @Override
    public void destroy() throws Exception {
        System.out.println("destroy()");
    }
 
}
cs



-applicationCTX.xml


1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="adminConnection" class="com.javalec.ex.AdminConnection" />
 
</beans>
 
cs





-admin.properties


1
2
admin.id=abcde
admin.pw=12345
cs



반응형