Spring 실습중 properties라는 부분을 배우게되었다.
properties 는 key=value 로 이루어져있는데
이것을 스프링이 읽어와서 사용할수있다
사용방법은 생각보다 간단하다
우선 프로퍼티를 읽어와 ${} << 이런식으로 키값을쓰게되면 value값이 출력이된다.
공통으로 사용하는 class파일이다
Product.java
package com.memory.common;
public abstract class Product {
private String name;
private int price;
public Product() {}
public Product(String name, int price) {
super();
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return name + " " + price;
}
}
Bread.java
package com.memory.common;
import java.util.Date;
public class Bread extends Product{
private Date bakedDate;
public Bread() {}
public Bread(String name, int price, Date bakedDate) {
super(name, price);
this.bakedDate = bakedDate;
}
public Date getBakedDate() {
return bakedDate;
}
public void setBakedDate(Date bakedDate) {
this.bakedDate = bakedDate;
}
@Override
public String toString() {
return super.toString() + " " + bakedDate;
}
}
Beverage.java
package com.memory.common;
public class Beverage extends Product{
private int capacity;
public Beverage() { }
public Beverage(String name, int price, int capacity) {
super(name, price);
this.capacity = capacity;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
@Override
public String toString() {
return super.toString() + " " + capacity;
}
}
ShoppingCart.java
package com.memory.common;
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
private final List<Product> items;
public ShoppingCart() {
items = new ArrayList<>();
}
public void addItem(Product item) {
items.add(item);
}
public List<Product> getItems(){
return items;
}
}
실습에사용되는 properties는 다음과같다
bread.fishbread.name=\uCD08\uCF54\uB9DB\uBD95\uC5B4\uBE75
bread.fishbread.price=1000
beverage.milk.name=\uBC14\uB098\uB098\uC6B0\uC720
beverage.milk.price=2000
beverage.milk.capacity=250
beverage.water.name=\uAE08\uAC15\uC0B0\uC808\uBCBD\uC218
beverage.water.price=3000
beverage.water.capacity=500
애너테이션 방식
ContextConfiguration.java
Configuration이라는 선언을하고
@PropertySource("해당경로") 으로 위치를 설정해준다
저장할필드에 @Value("${properties키값}") 으로작성하면 알아서 주입해준다.
간단하다. 주의할점으로는 ${키값} 작성할때 괄호안에 띄어쓰기가존재하면안된다..
띄어쓰기해가지고 시간좀많이잡아먹었다 ..
package com.memory.javaconfing.config;
import java.util.Date;
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.memory.common.Beverage;
import com.memory.common.Bread;
import com.memory.common.Product;
import com.memory.common.ShoppingCart;
@Configuration
@PropertySource("product.properties")
public class ContextConfiguration {
@Value("${bread.fishbread.name}")private String fishName;
@Value("${bread.fishbread.price}")private int fishPrice;
@Value("${beverage.milk.name}")private String milkName;
@Value("${beverage.milk.price}")private int milkPrice;
@Value("${beverage.milk.capacity}")private int milkCapacity;
@Value("${beverage.water.name}")private String waterName;
@Value("${beverage.water.price}")private int waterPrice;
@Value("${beverage.water.capacity}")private int waterCapacity;
@Bean
public Product fishBread() {
return new Bread(fishName, fishPrice, new Date());
}
@Bean
public Product milk() {
return new Beverage(milkName, milkPrice, milkCapacity);
}
@Bean
public Product water() {
return new Beverage(waterName, waterPrice, waterCapacity);
}
@Bean
@Scope("prototype")
public ShoppingCart cart() {
return new ShoppingCart();
}
}
Application.java
package com.memory.javaconfing;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.memory.common.Beverage;
import com.memory.common.Bread;
import com.memory.common.Product;
import com.memory.common.ShoppingCart;
import com.memory.javaconfing.config.ContextConfiguration;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class);
// 카트 2개 가져오기
ShoppingCart cart1 = context.getBean("cart", ShoppingCart.class);
ShoppingCart cart2 = context.getBean("cart", ShoppingCart.class);
//카트1에 물품담기
Product fish = context.getBean("fishBread", Bread.class);
Product milk = context.getBean("milk", Beverage.class);
cart1.addItem(fish);
cart1.addItem(milk);
Product water = context.getBean("milk", Beverage.class);
cart2.addItem(water);
// 출력
System.out.println("===== cart1 목록 출력 =====");
System.out.println(cart1.getItems());
System.out.println("===== cart2 목록 출력 =====");
System.out.println(cart2.getItems());
}
}
XML 방식
spring-context.xml
xml에서는 context 스키마를 먼저등록후 사용해야한다
property-placeholder 이용하여 프로퍼티 를 읽어온후 애너테이션방식과 마찬가지로 value에 ${키값} 적어준다.
사용방법은 비슷한것같다.
<?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.properties"/>
<bean id="date" class="java.util.Date"/>
<bean id="fishBread" class="com.memory.common.Bread">
<constructor-arg name="name" value="${bread.fishbread.name}"/>
<constructor-arg name="price" value="${bread.fishbread.price}"/>
<constructor-arg name="bakedDate" ref="date"/>
</bean>
<bean id="milk" class="com.memory.common.Beverage">
<constructor-arg name="name" value="${beverage.milk.name}"/>
<constructor-arg name="price" value="${beverage.milk.price}"/>
<constructor-arg name="capacity" value="${beverage.milk.capacity}"/>
</bean>
<bean id="water" class="com.memory.common.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.memory.common.ShoppingCart" scope="prototype"/>
</beans>
Application.java
package com.memory.xmlconfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.memory.common.Beverage;
import com.memory.common.Bread;
import com.memory.common.Product;
import com.memory.common.ShoppingCart;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("com/memory/xmlconfig/config/spring-context.xml");
// 카트 객체 생성
ShoppingCart cart1 = context.getBean("cart", ShoppingCart.class);
ShoppingCart cart2 = context.getBean("cart", ShoppingCart.class);
// 카트1 상품생성후 담기
Product fishBread = context.getBean("fishBread", Bread.class);
Product milk = context.getBean("milk", Beverage.class);
cart1.addItem(fishBread);
cart1.addItem(milk);
// 카트2 상품생성후 담기
Product water = context.getBean("water", Beverage.class);
cart2.addItem(water);
System.out.println("====== cart1 출력 ======");
System.out.println(cart1.getItems());
System.out.println("====== cart2 출력 ======");
System.out.println(cart2.getItems());
}
}
출력내용
'프로그래밍 > Spring' 카테고리의 다른 글
Spring - 6_2. Spring JDBC (XML) (0) | 2021.10.25 |
---|---|
Spring - 8. 다국어 메세지 (0) | 2021.10.22 |
Spring - 6_1. Spring JDBC (Annotation) (0) | 2021.10.22 |
Spring - 5. Spring IOC (0) | 2021.10.18 |
Spring - 4. Spring IOC (0) | 2021.10.15 |