Spring - 7. Spring properties

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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유