728x90
반응형
SpringBean Configuration file
/ioc.xml
<bean> = DL 방식 (id= ticket, peson로 객체 할당 - TestIOC에서 getBean으로 검색하여 할당받기 가능)
<constructor-arg> = DI 방식, 생성자에 값 주입(name과 ticket을 주입해줌)
- ticket과 person에 DL 방식으로 할당- person을 생성하기 위해 <constructor-arg> 에 생성자 요소를 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.xsd">
<!-- 객체 생성 시 주입을 통해 할당 (DI방식) -->
<bean id="ticket" class="model.KETicket"></bean>
<bean id="person" class="model.Person">
<!-- 생성자 -->
<constructor-arg>
<value>아이유</value>
</constructor-arg>
<constructor-arg>
<ref bean="ticket"/>
</constructor-arg>
</bean>
</beans>
/model
/Ticket.java <<interface>>
package model;
public interface Ticket {
public void ticketing();
}
name or ticket을 set할 때, Spring IOC Container로부터 주입받는다.
+ name과 Ticket의 생성자를 생성한다.
/Person.java
package model;
public class Person {
private String name;
private Ticket ticket;
public Person(String name, Ticket ticket) {
super();
this.name = name;
this.ticket = ticket;
}
public String getName() {
return name;
}
/**
* name을 Spring IOC Container로부터 주입받는다.
* (DI:Dependency Injection 방식)
* @param name
*/
public void setName(String name) {
this.name = name;
}
public Ticket getTicket() {
return ticket;
}
/**
* ticket을 Spring IOC Container로부터 주입받는다.
* @param ticket
*/
public void setTicket(Ticket ticket) {
this.ticket = ticket;
}
}
/KETicket.java
package model;
public class KETicket implements Ticket {
@Override
public void ticketing() {
System.out.println("대한항공 티켓을 예매하다.");
}
}
/OZTicket.java
package model;
public class OZTicket implements Ticket {
@Override
public void ticketing() {
System.out.println("아시아나 티켓을 예매하다.");
}
}
/test
/TestIOC.java
package test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import model.Person;
import model.Ticket;
public class TestIOC {
public static void main(String[] args) {
//spring IOC container의 config를 factory에 할당
ClassPathXmlApplicationContext factory
= new ClassPathXmlApplicationContext("ioc.xml");
/* DL 방식(config에서 id를 통해 검색하여 가져옴) */
System.out.println("---DL 방식---");
// ticket 객체를 확보해서 사용
Ticket ticket = (Ticket) factory.getBean("ticket");
ticket.ticketing();
// person 객체를 확보해서 사용
Person person = (Person) factory.getBean("person");
/* DI 방식(config에서 값을 주입함) */
System.out.println("---DI 방식---");
// DI방식으로 주입받은 name을 출력
System.out.println(person.getName());
// DI방식으로 주입받은 ticket의 ticketing을 실행
person.getTicket().ticketing();
factory.close();
}
}
[ 결과 ]
728x90
반응형
'Java Web Programming > 6. Spring | MyBatis' 카테고리의 다른 글
[Spring] DBCP를 Spring config로 설정해보기! (+IOC/DI+DL) (0) | 2020.10.27 |
---|---|
[Spring] 비즈니스 로직 계층 추가 (IOC, DI+DL) (0) | 2020.10.27 |
[Spring] DI/DL 적용 + Spring IOC 개발 + maven (0) | 2020.10.27 |
[Spring] 메이븐 maven 형식, Spring IOC 개발단계 (0) | 2020.10.27 |
[Framework/Spring] IOC / DI 의 개념과 활용 (0) | 2020.10.26 |