Spring Framework
Spring IoC & DI
Spring IoC 실습
(어노테이션기반, 인터페이스, 세터주입)
Spring Framework_Spring Ioc & DI
Spring IoC & DI
package edu.biz.ioc4;
import org.springframework.stereotype.Component;
@Component("money") // DTO같은 컴포넌트 클래스임을 의미, @Named와 동일
public class Money {
private int amount;
public Money() {
}
public Money(int amt) {
this.amount = amt;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
3. Spring IoC 실습 (어노테이션 기반, 인터페이스, 세터주입)
2-2에서 작성한 예제를 어노테이션 기반으로 변경해 보자.
[Money.java]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
import org.springframework.stereotype.Component;
@Component("car")
public class Car {
private String name;
public Car() {
}
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[Car.java]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
public interface CarMaker {
//돈을 받고 차를 판다
public Car sell(Money money) ;
}
[CarMaker.java]
[HyundaiMaker.java]
package edu.biz.ioc4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("hyundai") //@Named와 동일, 서비스계층의 클래스임을 의미
public class HyundaiMaker implements CarMaker{
@Autowired //@Inject와 동일
private Car car;
public Car sell(Money money) {
System.out.println("I sold a Sonata.");
car.setName("Sonata");
return car;
}
}
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(“daewoo")
public class DaewooMaker implements CarMaker{
@Autowired
private Car car;
public Car sell(Money money) {
System.out.println("I sold a Tosca.");
car.setName(“Tosca");
return car;
}
}
[DaewooMaker.java]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service("orderManager")
public class OrderManager {
private String name;
@Autowired // TYPE이 CarMaker 인것 찾아 자동 주입, 여러 개인 경우 Qualifier로 지정
@Qualifier("daewoo")
private CarMaker maker;
@Autowired // TYPE이 Money 인 것을 찾아 자동 주입
private Money money;
public OrderManager() {
}
public void order() {
money.setAmount(1000);
Car car = this.maker.sell(money);
}
}
[OrderManager.java]
Spring Framework_Spring Ioc & DI
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<beans>
<context:annotation-config/> ←생략가능!!→
<context:component-scan base-package="edu.biz.ioc4"/>
</beans>
[ioc4.xml]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class OrderManagerApp {
public static void main(String[] args) {
ApplicationContext factory = new
ClassPathXmlApplicationContext("classpath:ioc4.xml");
OrderManager manager = (OrderManager)
factory.getBean("orderManager");
manager.order();
}
}
[OrderManagerApp.java]
 실행 후 결과를 확인하자.
Spring Framework_Spring Ioc & DI
package edu.biz.ioc4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class OrderManagerApp {
//생성자가 아닌 직접 autowiring은 불가, static 변수는 autowiring 안된다.
static OrderManager orderManager;
@Autowired
public OrderManagerApp(OrderManager orderManager) {
OrderManagerApp.orderManager = orderManager;
}
public static void main(String[] args) {
ApplicationContext factory =
new ClassPathXmlApplicationContext("classpath:ioc4.xml");
//OrderManager manager = (OrderManager)
factory.getBean("orderManager");
orderManager.order();
}
}
[수정된 OrderManagerApp.java]

4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)

  • 1.
    Spring Framework Spring IoC& DI Spring IoC 실습 (어노테이션기반, 인터페이스, 세터주입)
  • 2.
    Spring Framework_Spring Ioc& DI Spring IoC & DI package edu.biz.ioc4; import org.springframework.stereotype.Component; @Component("money") // DTO같은 컴포넌트 클래스임을 의미, @Named와 동일 public class Money { private int amount; public Money() { } public Money(int amt) { this.amount = amt; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } 3. Spring IoC 실습 (어노테이션 기반, 인터페이스, 세터주입) 2-2에서 작성한 예제를 어노테이션 기반으로 변경해 보자. [Money.java]
  • 3.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; import org.springframework.stereotype.Component; @Component("car") public class Car { private String name; public Car() { } public Car(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } [Car.java]
  • 4.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; public interface CarMaker { //돈을 받고 차를 판다 public Car sell(Money money) ; } [CarMaker.java] [HyundaiMaker.java] package edu.biz.ioc4; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("hyundai") //@Named와 동일, 서비스계층의 클래스임을 의미 public class HyundaiMaker implements CarMaker{ @Autowired //@Inject와 동일 private Car car; public Car sell(Money money) { System.out.println("I sold a Sonata."); car.setName("Sonata"); return car; } }
  • 5.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service(“daewoo") public class DaewooMaker implements CarMaker{ @Autowired private Car car; public Car sell(Money money) { System.out.println("I sold a Tosca."); car.setName(“Tosca"); return car; } } [DaewooMaker.java]
  • 6.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service("orderManager") public class OrderManager { private String name; @Autowired // TYPE이 CarMaker 인것 찾아 자동 주입, 여러 개인 경우 Qualifier로 지정 @Qualifier("daewoo") private CarMaker maker; @Autowired // TYPE이 Money 인 것을 찾아 자동 주입 private Money money; public OrderManager() { } public void order() { money.setAmount(1000); Car car = this.maker.sell(money); } } [OrderManager.java]
  • 7.
    Spring Framework_Spring Ioc& DI <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <beans> <context:annotation-config/> ←생략가능!!→ <context:component-scan base-package="edu.biz.ioc4"/> </beans> [ioc4.xml]
  • 8.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class OrderManagerApp { public static void main(String[] args) { ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:ioc4.xml"); OrderManager manager = (OrderManager) factory.getBean("orderManager"); manager.order(); } } [OrderManagerApp.java]  실행 후 결과를 확인하자.
  • 9.
    Spring Framework_Spring Ioc& DI package edu.biz.ioc4; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Service; @Service public class OrderManagerApp { //생성자가 아닌 직접 autowiring은 불가, static 변수는 autowiring 안된다. static OrderManager orderManager; @Autowired public OrderManagerApp(OrderManager orderManager) { OrderManagerApp.orderManager = orderManager; } public static void main(String[] args) { ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:ioc4.xml"); //OrderManager manager = (OrderManager) factory.getBean("orderManager"); orderManager.order(); } } [수정된 OrderManagerApp.java]