1. properties이용법
1.
resources 파일을 생성한다.
2.
buildPath을 이용하여 resources 파일을 Source탭에 add 해준다.
3.
resources 파일안에다가 properties파일을 추가하며 내용을key, value형식으로 작성한다.
4. ContextConfiguration 클래스를 생성하며 @Configuration과 @PropertySource("")를 사용한다.
5 .properties파일에 저장된 키 값을 value 어노테이션에다가 넣어준다.(@Value)
6. @Value 에다가 공백까지 포함하여 값을 입력하면 공백도 값으로 읽기때문에 공백은제거해줘야한다.
7. 표현식은 @Value("${bread.carpbread.name}")식으로 하며 properties파일에 key, value값이 없는경우 @Value("${bread.carpbread.name : 붕어빵}") 이렇게 표현할 수 도있다 . 그러면 붕어빵이라는 이름을 가져오게된다.
2. javaconfig에서 예시
package com.greedy.section01.properties.javaconfig.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
import com.greedy.section01.properties.javaconfig.Beverage;
import com.greedy.section01.properties.javaconfig.Bread;
import com.greedy.section01.properties.javaconfig.Product;
import com.greedy.section01.properties.javaconfig.ShoppingCart;
@Configuration
//properties파일을 이용한 방식은 많이 사용되는 방식중 1개 이다
@PropertySource("product-info.properties")
public class ContextConfiguration {
/*product-info.properties에 저장된 키값을 value 어노테이션에다가 넣어준다
* @Value에서 공백을주면 공백도 키값으로 여기기때문에 공백은제거해줘야한다*/
@Value("${bread.carpbread.name:붕어빵}")
private String carpBreadName;
@Value("${bread.carpbread.price:777}")
private int carpBreadPrice;
@Value("${beverage.milk.name:}")
private String milkName;
@Value("${beverage.milk.price:77}")
private int price;
@Value("${beverage.milk.capacity:0}")
private int capacity;
@Bean
public Product carpBread() {
return new Bread(carpBreadName, carpBreadPrice, new java.util.Date());
}
@Bean
public Product milk() {
return new Beverage(milkName, price, capacity);
}
@Bean
public Product water(@Value("${beverage.water.name:}") String waterName,
@Value("${beverage.water.price:0}") int waterPrice,
@Value("${beverage.water.capacity:0}") int waterCapacity) {
return new Beverage(waterName, waterPrice, waterCapacity);
}
@Bean
@Scope("prototype")
public ShoppingCart cart() {
return new ShoppingCart();
}
}
Java
복사
3. xmlconfig예시
<?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-4.3.xsd">
<context:property-placeholder location="product-info.properties"/>
<bean id="carpBread" class="com.greedy.section01.properties.xmlconfig.Bread">
<constructor-arg name="name" value="${bread.carpbread.name:붕어빵}"/>
<constructor-arg name="price" value="${bread.carpbread.price:1500}"/>
<constructor-arg name="bakedDate" ref="today"/>
</bean>
<bean id="today" class="java.util.Date" scope="prototype"/>
<bean id="milk" class="com.greedy.section01.properties.xmlconfig.Beverage">
<constructor-arg name="name" value="${beverage.milk.name :sad}"/>
<constructor-arg name="price" value="${beverage.milk.price}"/>
<constructor-arg name="capacity" value="${beverage.milk.capacity}"/>
</bean>
<bean id="water" class="com.greedy.section01.properties.xmlconfig.Beverage">
<constructor-arg name="name" value="${beverage.water.name}"/>
<constructor-arg name="price" value="${beverage.water.price}"/>
<constructor-arg name="capacity" value="${beverage.water.capacity}"/>
</bean>
<bean id="cart" class="com.greedy.section01.properties.xmlconfig.ShoppingCart" scope="prototype">
</bean>
</beans>
XML
복사
4. locale
locale이란 ? 세계 여러 나라들은 각자 다른 문화(언어, 날짜, 시간 등)을 갖고 있다. 프로그램의 국제화(Internationalization, 줄여서 i18n)는 사용자로 하여금 프로그램 수행시 로케일이란 것에 의해 입맛에 맞는 환경을 선택할 수 있도록 만든 것을 말한다.
- I18N 소프트웨어 국제화의 특징
1.
I부터 N까지 총 18개
2.
언어 ,지역별 번역
3.
OS/플랫폼 인코딩
4.
문자열 치환방법 : 서버쪽, 클라이언트 쪽 치환중 서버쪽에서 하는 것이 더 좋다. ( 경우에 따라 다르긴 함)
5.
국제화 UI (문자열 크기 변화, 폰트, 아이콘)
6.
쓰기 방향차이
7.
숫자 , 공백, 화폐, 날짜, 주소, 측정단위 등
8.
타임존, 섬머타임 등 시각
9.
문자열 정렬방법
4-1 locale 파일 설정순서
1.
resource폴더를 만들고 buildPath에서 source탭에 추가시켜준다
2.
message_en_US.properties 파일을 생성한다. 이거는 정해진 형식이므로 지켜주도록하자 만약 한국어로 된 properties를 만들려고하면 message_ko_KR.properties 파일로 생성하면된다.
4-2 예제
1. properties파일에 key,value형식으로 만들어준다
(key) (value)
error.404=Page Not Found!!
error.500=something wrong! The developer`s falut. who is developer? It`s {0} at {1}
2. ContextConfiguration 설정방법
@Configuration
public class ContextConfiguration {
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
접속하는 세션의 로케일에 따라 자동 재로딩하는 용도의 MessageSource */
ReloadableResourceBundleMessageSource messageSource =
new ReloadableResourceBundleMessageSource();
다국어 메세지를읽어올 properties 파일의 기본이름을 설정한다.
로케일이 존재하지 않는 경우 해당 파일을 읽어온다
messageSource.setBasename("message");
messageSource.setCacheSeconds(10);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
3. Application 설정
package com.greedy.section02.locale.javaconfig;
import java.util.Date;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.greedy.section02.locale.javaconfig.config.ContextConfiguration;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class);
String error404Message = context.getMessage("error.404", null, Locale.KOREA);
properties파일 value형식에 {0}, {1} 부분을 new Object[]라는 걸로 정의하여 {}값에 값을 넣어준다
String error500Message = context.getMessage("error.500", new Object[]{"namgyu", new Date()}, Locale.US);
System.out.println("The I18N message for error.404: " + error404Message);
System.out.println("The I18N message for error.500: " + error500Message);
}
}
Java
복사