Product (상품)
┌──────────────┐
│ name, price │
└──────┬───────┘
┌──────────┴──────────┐
│ │
Bread (빵) Beverage (음료)
bakedDate capacity
│ │
carpBread milk, water
(붕어빵) (딸기우유, 지리산암반수)


→ properties 파일이 유니코드로 작성될 때 설정) 파일인코딩에서 utf-8

→ 나중에 yml파일은 밑줄 친 중복내용을 작성하지 않게된다.

파일: section03.properties.subsection01

하드코딩 대신 외부 설정 파일(product-info.properties)에서 값을 읽어 빈 생성 시 주입
bread.carpbread.name=붕어빵
bread.carpbread.price=1000
beverage.milk.name=초코우유
beverage.milk.price=1200
beverage.milk.capacity=750
beverage.water.name=백두산암반수
beverage.water.price=2200
beverage.water.capacity=1000
→ 최대한 공백이 없도록 작성
@Configuration
**@PropertySource("/section03/properties/subsection01/product-info.properties")**
public class ContextConfiguration {
/* 설명.
* DI와는 별개로 외부 리소스로부터 키값을 활용해 value를 불러와
* 변수에 대입이 가능하다.
* 1. 코드 상에서 실제 대입되는 값을 숨길 수 있음
* 2. 외부 리소스 수정을 통해 서버가 중단되지 않고도 값이 수정될 수 있다. */
@Value("${bread.carpbread.name}") // 설정파일로부터 불러와서 변수..
private String carpBreadName;
// private String carpBreadName = "붕어빵";
// 원래 이렇게.. 하드코딩 X 1.보안성 2.실시간 수정가능(서버가 도는 상황에서도 수정가능)
@Value("${bread.carpbread.price}")
private int carpBreadPrice;
@Value("${beverage.milk.name}")
private String milkName;
@Value("${beverage.milk.price}")
private int milkPrice;
@Value("${beverage.milk.capacity}")
private int milkCapacity;
@Bean
public Product carpBread(){
return new Bread(carpBreadName, carpBreadPrice, new java.util.Date());
}
@Bean
public Product milk(){
return new Beverage(milkName, milkPrice,milkCapacity);
}
@Bean
public Product water(@Value("${beverage.water.name}") String waterName,
@Value("${beverage.water.price}") int waterPrice,
@Value("${beverage.water.capacity}") int waterCapacity)
{
return new Beverage(waterName,waterPrice,waterCapacity);
}
}
@PropertySource로 파일을 로드하고 @Value("${키}")로 필드/파라미터에 주입⇒ DI와는 별개로 외부 리소스로부터 키값을 활용해 value를 불러와 변수에 대입이 가능하다.