Property(속성)
Property(속성) 란 무엇인가요 ?
=> 일반적으로 DTO(Data Transfer Object) 또는 VO(Value Obejct) 에서 볼 수 있다.
=> 인스턴스 변수와 getter와 setter로 만들어진 형태
[Properties ]
=> 키와 값을 쌍으로 갖는 자료구조 또는 파일입니다.
=> 키와 값을 자료형이 모두 String(문자열) 입니다.
=> 변경 가능성이 있는 문자열을 별도의 properties 파일에 작성해두고 프로그램 내에서 호출하는 형태로 많이 사용합니다.
=> 변경 가능성이 있는 문자열을 String 타입의 객체에 저장해두고 사용하면 수정을 할 때 컴파일을 다시해서 실행시켜야합니다.
=> 컴파일을 다시해서 실행하게 되면 시간이 오래 걸리게 되면 컴파일을 하다 예기치 못한 오류를 발생가능성이 있습니다.
=> 별도의 파일이나 테이터베이스를 이용하게 되면 컴파일을 다시 하지 않고 재실행 만으로 변경 내용을 적용할 수 있기 때문에
예기치 못한 오류를 발생시킬 가능성이 줄어들게 됩니다.
[유의사항]
=>properties 작성할 때 유의할 점은 utf-8로 인코딩해서 작성해야 하는 것입니다.
=>eclipse에서는 text file이나 encoding 옵션을 utf-8로 설정 해두고 작업을 하는 것이 편리합니다.
[예제를 하나 만들어 봅시다]
4. src/main/resources 디렉토리에 db.properties 파일을 생성
1 2 | user.email=ggangpae1@naver.com user.name=관리자 | cs |
5. main클래스에서 properties 불러보기
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 | package main; import java.io.IOException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MutablePropertySources; import org.springframework.core.io.support.ResourcePropertySource; public class Main { // 응용 프로그램이 호출할 수 있는 유일한 메소드 모양입니다. public static void main(String[] args) { // 자바의 프로퍼티 // ApplicationContext 객체 만들기 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); // 시스템 프로퍼티를 읽을 수 있는 객체를 생성 ConfigurableEnvironment env = (ConfigurableEnvironment) context.getEnvironment(); // Property 파일의 내용을 읽을 수 있는 객체를 생성 MutablePropertySources pSource = env.getPropertySources(); // 프로퍼티 파일 연결 try { pSource.addFirst(new ResourcePropertySource("classpath:user.properties")); System.out.println("이메일:"+env.getProperty("user.email")); System.out.println("이메일:"+env.getProperty("user.name")); } catch (IOException e) { System.out.println("[Main] Property 예외" + e.getMessage()); e.printStackTrace(); } // applicationContext 객체 닫기 context.close(); } } | cs |
[ 스프링 설정 파일에 properties 파일 읽기 ]
<context:property-placeholder location=“classpath:/프로퍼티파일 경로"/>
태그를 스프링 설정 파일에 추가하고 ${프로퍼티 파일의 키}를 작성하면 프로퍼티 파일에서 키에 해당하는 문자열을 가져와서 출력을 하게 됩니다.
1.src/main/resources 디렉토리에 db.properties 파일을 만들고 db 접속 정보를 프로퍼티로 생성
1 2 3 4 5 6 | db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@localhost:1521:xe db.user=user08 db.password=user08 | cs |
2.driver, url, user, password를 프로퍼티(인스턴스 변수, getter, setter)로 갖는 db.Dao 클래스를 생성
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 | package domain; public class DbVo { private String driver; private String url; private String user; private String password; public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "DbVo [driver=" + driver + ", url=" + url + ", user=" + user + ", password=" + password + "]"; } } | cs |
3.SpringBeanConfiguration 파일을 src/main/resources 디렉토리에 생성하고 Dao 클래스의 객체를 만드는 코드를 추가
1)context 네임스페이스 추가
2)프로퍼티 파일의 내용을 읽을 수 있는 태그 추가
1 | <context:property-placeholder location="classpath:/db.properties" /> | cs |
3)Dao 클래스의 bean을 생성하는 코드를 추가하고 property에 db.properties 파일의 내용을 설정하는 코드를 작성 - DI
1 2 3 4 5 6 7 8 9 10 | <!-- db.Dao 클래스의 객체를 생성하는 코드 --> <bean id="dao" class="db.Dao"> <!-- driver 라는 프로퍼티에 db.properties 파일에 작성한 db.driver 라는 키의 값을 대입 --> <property name="driver" value="${db.driver}" /> <property name="url" value="${db.url}" /> <property name="user" value="${db.user}" /> <property name="password" value="${db.password}" /> </bean> | cs |
4.main 메소드의 내용을 수정해서 dao 빈의 내용을 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //응용 프로그램이 호출할 수 있는 유일한 메소드 모양입니다. public static void main(String[] args){ //ApplicationContext 객체 만들기 GenericXmlApplicationContext context = new GenericXmlApplicationContext( "classpath:applicationContext.xml"); //db.Dao 클래스의 bean 가져오기 Dao dao = context.getBean(Dao.class); System.out.println(dao); //ApplicationContext 객체 닫기 context.close(); } | cs |
'Java > 스프링' 카테고리의 다른 글
JdbcTemplate 클래스 (0) | 2018.04.09 |
---|---|
Spring 2-2 TEST 디렉토리 사용 (0) | 2018.04.09 |
Spring 1- 2 DI와 IOC ,@Component @Bean 사용 정리 (0) | 2018.04.06 |
DI(Dependency Injection) (0) | 2018.04.05 |
Spring 1-1) IOC 제어의 역전 (0) | 2018.04.05 |