스프링 레시피 CH2.2 생성자 호출해서 POJO 생성하기
2023. 12. 10. 22:09ㆍspring
과제
IoC 컨테이너에서 생성자를 호출해서 POJO 인스턴스/빈을 생성하세요. 생성자를 호출하는 건 스프링에서 빈을 생성하는 가장 일반적이면서 직접적인 방법입니다. 자바 new 연산자로 객체를 생성하는 것과 같습니다.
해결책
1. POJO 클래스에 생성자를 하나 이상 정의한다.
2. 자바 구성 클래스에서 IoC 컨테이너가 사용할 POJO 인스턴스값을 생성자로 설정한다.
3. IoC 컨테이너를 인스턴스화해서 애너테이션을 붙인 자바 클래스를 스캐닝한다.
Product 추상 클래스 설계
public abstract class Product {
private String name;
private double price;
public Product() {}
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
@Override
public String toString() {
return "Product{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
1. POJO 클래스에 생성자를 하나 이상 정의한다.
public class Battery extends Product{
private boolean rechargeable;
public Battery() {
super();
}
public Battery(String name, double price) {
super(name, price);
}
public boolean isRechargeable() {
return rechargeable;
}
public void setRechargeable(boolean rechargeable) {
this.rechargeable = rechargeable;
}
}
public class Disc extends Product{
private int capacity;
public Disc () {
super();
}
public Disc(String name, double price) {
super(name, price);
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
}
2. 자바 구성 클래스에서 IoC 컨테이너가 사용할 POJO 인스턴스값을 생성자로 설정한다.
@Configuration
public class ShopConfiguration {
@Bean
public Product aaa() {
Battery p1 = new Battery("AAA", 2.5);
p1.setRechargeable(true);
return p1;
}
@Bean
public Product cdrw() {
Disc p2 = new Disc("CD-RW", 1.5);
p2.setCapacity(700);
return p2;
}
}
3. IoC 컨테이너를 인스턴스화해서 애너테이션을 붙인 자바 클래스를 스캐닝한다.
public class ShopMainExample {
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(ShopConfiguration.class);
Product aaa = context.getBean("aaa", Product.class);
Product cdrw = context.getBean("cdrw", Product.class);
System.out.println(aaa);
System.out.println(cdrw);
}
}
=>
Product{name='AAA', price=2.5}
Product{name='CD-RW', price=1.5}
'spring' 카테고리의 다른 글
스프링 레시피 CH2.4 @Resource와 @Inject를 붙여 POJO 자동 연결 하기 (0) | 2023.12.11 |
---|---|
스프링 레시피 CH2.3 POJO 레퍼런스와 자동 연결을 이용해 다른 POJO와 상호 작용하기 (0) | 2023.12.10 |
스프링 레시피 CH2.1 자바로 POJO 구성하기 (0) | 2023.12.10 |
AOP란? (0) | 2022.05.28 |
스프링 DI 지시서 작성하기(Spring bean Configuration) (0) | 2022.05.17 |