SlideShare a Scribd company logo
Spring Framework & MyBatis
스프링 프레임워크 & 마이바티스 강의
탑크리에듀 교육센터
1. 스프링 프레임워크 개요
2. Spring IoC & DI
2.5 Spring DI(Dependency Injection)
2.5.1 세터 주입(Setter Injection) – XML 기반
2.5.2 세터 주입(Setter Injection) – 어노테이션 기반
2.5.3 생성자 주입(Constructor Injection) – XML 기반
2.5.4 생성자 주입(Constructor Injection) – 어노테이션 기반
2.5.5 메소드 주입(Method Injection)
2.5.5.1 Method Injection(Method Replace)
2.5.5.2 Method Injection(Getter Injection)
CONTENTS
1. 스프링 프레임워크 개
2.5.6 Simple Value Injection
2.5.7 SpEL을 이용한 Value Injection(XML 방식)
2.5.8 SpEL을 이용한 Value Injection(어노테이션 방식)
2.5.9 ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)
2.5.10 스프링에서 XML 설정 파일의 분리
2.5.11 ApplicationContext의 분리(부모, 자식)
2.5.12 컬렉션 주입(Collection Injection), XML 방식
2.5.12 컬렉션 주입(Collection Injection), 어노테이션 방식
Chapter 2
Spring IoC & DI
2-5
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-1. 세터 주입(Setter Injection) – XML 기반
 [Emp.java]
package edu.ojc.setter1;
interface Emp {
public abstract void gotoOffice();
public abstract void getoffWork();
}
: 세터주입은 클래스 사이의 의존관계를 연결시키기 위해 setter 메소드를 이용하는 방법이다.
 [Programmer.java]
package edu.ojc.setter1;
class Programmer implements Emp {
public void gotoOffice() {
System.out.println("프로그래머 출근 합니다.");
}
public void getoffWork() {
System.out.println("프로그래머 퇴근 합니다.");
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-1. 세터 주입(Setter Injection) – XML 기반
 [Designer.java]
package edu.ojc.setter1;
class Designer implements Emp {
public void gotoOffice() {
System.out.println("디자이너 출근 합니다.");
}
public void getoffWork() {
System.out.println("디자이너 퇴근 합니다.");
}
}
 [Develop.java]
package edu.ojc.setter1;
public class Develope {
Emp emp;
public void setEmp(Emp emp) {
this.emp = emp;
}
void coding() {
emp.gotoOffice();
System.out.println("개발합니다...");
emp.getoffWork();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-1. 세터 주입(Setter Injection) – XML 기반
 [Src/main/resources/ojc1.xml]
– p 네임스페이스를 이용한 세터주입
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="programmer" class="edu.ojc.setter1.Programmer" />
<bean id="designer" class="edu.ojc.setter1.Designer" />
<bean id="develope" class="edu.ojc.setter1.Develope" p:emp-ref="programmer" />
<!--
//아래처럼 Property 태그를 이용해도 된다.
<bean id="develope" class="edu.ojc.setter1.Develope">
<property name="emp“><ref bean="programmer"/></property>
</bean>
<bean id="develope" class="edu.ojc.setter1.Develope">
<property name="emp" ref="programmer"/> </bean>
-->
</beans>
 [TestMain.java]
package edu.ojc.setter1;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("ojc1.xml");
Develope dev = (Develop)context.getBean("develope");
dev.coding();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반
 [Emp.java]
package edu.ojc.setter2;
interface Emp {
public abstract void gotoOffice();
public abstract void getoffWork();
}
 [Programmer.java]
package edu.ojc.setter2;
import org.springframework.stereotype.Service;
@Service
class Programmer implements Emp {
public void gotoOffice() {
System.out.println("프로그래머 출근 합니다.");
}
public void getoffWork() {
System.out.println("프로그래머 퇴근 합니다.");
}
}
 [Designer.java]
package edu.ojc.setter2;
import org.springframework.stereotype.Service;
@Service
class Designer implements Emp {
public void gotoOffice() {
System.out.println("디자이너 출근 합니다.");
}
public void getoffWork() {
System.out.println("디자이너 퇴근 합니다.");
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반
 [Develop.java]
package edu.ojc.setter2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class Develope {
Emp emp;
@Autowired
@Qualifier("programmer")
public void setEmp(Emp emp) {
this.emp = emp;
}
void coding() {
emp.gotoOffice();
System.out.println("개발합니다...");
emp.getoffWork();
}
}
 [Src/main/resources/ojc2.xml]
<?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.2.xsd">
<context:component-scan base-
package="edu.ojc.setter2"/>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반
 [TestMain.java]
package edu.ojc.setter2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("ojc1.xml");
Develope dev = (Develop)context.getBean("develope");
dev.coding();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반
 [TestMain.java]
package edu.ojc.setter2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("ojc1.xml");
Develope dev = (Develop)context.getBean("develope");
dev.coding();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-3. 생성자 주입(Constructor Injection) – XML 기반
 [Emp.java]
package edu.ojc.constructor1;
interface Emp {
public abstract void gotoOffice();
public abstract void getoffWork();
}
 [Programmer.java]
package edu.ojc.constructor1;
class Programmer implements Emp {
public void gotoOffice() {
System.out.println("프로그래머 출근 합니다.");
}
public void getoffWork() {
System.out.println("프로그래머 퇴근 합니다.");
}
}
 [Designer.java]
package edu.ojc.constructor1;
class Designer implements Emp {
public void gotoOffice() {
System.out.println("디자이너 출근 합니다.");
}
public void getoffWork() {
System.out.println("디자이너 퇴근 합니다.");
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-3. 생성자 주입(Constructor Injection) – XML 기반
 [Develop.java]
package edu.ojc.constructor1;
public class Develope {
Emp emp;
public Develope(Emp emp) {
this.emp = emp;
}
void coding() {
emp.gotoOffice();
System.out.println("개발합니다...");
emp.getoffWork();
}
}
 [Src/main/resources/ojc3.xml]
– C 네임스페이스를 이용한 세터주입
<?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:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="programmer" class="edu.ojc.constructor1.Programmer" />
<bean id="designer" class="edu.ojc.constructor1.Designer" />
<bean id="develope" class="edu.ojc.constructor1.Develope" c:emp-
ref="programmer" />
<!--
<bean id="develope" class="edu.ojc.constructor1.Develope">
<constructor-arg ref="programmer"/>
</bean>
-->
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-3. 생성자 주입(Constructor Injection) – XML 기반
 [TestMain.java]
package edu.ojc.constructor1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("ojc3.xml");
Develope dev = (Develope)context.getBean("develope");
dev.coding();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반
 [Emp.java]
package edu.ojc.constructor2;
interface Emp {
public abstract void gotoOffice();
public abstract void getoffWork();
}
 [Programmer.java]
package edu.ojc.constructor2;
import org.springframework.stereotype.Service;
@Service
class Programmer implements Emp {
public void gotoOffice() {
System.out.println("프로그래머 출근 합니다.");
}
public void getoffWork() {
System.out.println("프로그래머 퇴근 합니다.");
}
}
 [Designer.java]
package edu.ojc.constructor2;
import org.springframework.stereotype.Service;
@Service
class Designer implements Emp {
public void gotoOffice() {
System.out.println("디자이너 출근 합니다.");
}
public void getoffWork() {
System.out.println("디자이너 퇴근 합니다.");
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반
 [Develop.java]
package edu.ojc.constructor2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class Develope {
Emp emp;
@Autowired
public Develope(@Qualifier(value="programmer") Emp emp) {
this.emp = emp;
}
void coding() {
emp.gotoOffice();
System.out.println("개발합니다...");
emp.getoffWork();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반
 [Src/main/resources/ojc4.xml]
<?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.2.xsd">
<context:component-scan base-
package="edu.ojc.constructor2"/>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반
 [TestMain.java]
package edu.ojc.constructor2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("ojc4.xml");
Develope dev = (Develop)context.getBean("develope");
dev.coding();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-5. 메소드 주입(Method Injection)
: Method 정의 전체에 Bean을 주입하는 것으로 Method Replace와 Getter Injection으로 구별할 수 있다.
 Method Replace(메소드 대체) : 기존 메소드를 런타임 중에 새로운 구현으로 대체
 Getter Injection(게터 주입) : 기존 메소드를 런 타임 중에 spring Context로 부터 특정한 빈을 반환하
는 새로운 구현으로 대체. Method 주입의 특별한 경우로 Method가 특정 타입의 빈을 반환하도록 선언
해 두고(보통 abstract) 런타임 중 실제 반환되는 빈은 Spring Context에서 오도록 하는 방법
2-5-5-1. Method Injection(Method Replace)
 [Emp.java]
package ojc1;
public interface Emp {
public String work();
}
 [Programmer.java]
package ojc1;
public class Programmer implements Emp {
public String work() {
return
"Programmer Working...";
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-5. 메소드 주입(Method Injection)
2-5-5-1. Method Injection(Method Replace)
 [Designer.java]
package ojc1;
import java.lang.reflect.Method;
import
org.springframework.beans.factory.support.MethodReplacer;
import org.springframework.stereotype.Service;
public class Designer implements MethodReplacer {
public Object reimplement(Object target,
Method method, Object[] args) throws Throwable {
return "Designer Working...";
}
}
 [MethodReplaceTest.java]
package ojc1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MethodReplaceTest {
Emp programmer;
public void setProgrammer(Programmer programmer) {
this.programmer = programmer;
}
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("lookup.xml");
MethodReplaceTest test = (MethodReplaceTest)
context.getBean("methodReplaceTest");
//Programmer의 work()가 아닌 대체자인 Designer의 work()가 실행됨
System.out.println(test.programmer.work());
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-5. 메소드 주입(Method Injection)
2-5-5-1. Method Injection(Method Replace)
 [/src/main/resources/lookup.xml]
<?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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<bean id="programmer" class="ojc1.Programmer">
<replaced-method name="work" replacer="designer" />
</bean>
<bean id="designer" class="ojc1.Designer" />
<bean id="methodReplaceTest" class="ojc1.MethodReplaceTest">
<property name="programmer" ref="programmer"/>
</bean>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-5. 메소드 주입(Method Injection)
2-5-5-2. Method Injection(Getter Injection)
 [/src/main/resources/lookup.xml]
<?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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<bean id="programmer" class="ojc1.Programmer">
<replaced-method name="work" replacer="designer" />
</bean>
<bean id="designer" class="ojc1.Designer" />
<bean id="methodReplaceTest" class="ojc1.MethodReplaceTest">
<property name="programmer" ref="programmer"/>
</bean>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-5. 메소드 주입(Method Injection)
2-5-5-2. Method Injection(Getter Injection)
 [EmpTest.java]
package ojc2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EmpTest {
public static void main(String[] args) throws Exception{
ApplicationContext ctx = new ClassPathXmlApplicationContext("emp.xml");
Emp emp = (Emp) ctx.getBean("emp");
emp.work();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-6. Simple Value Injection
 [XML]
<?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">
<bean name="sample" class="onj.value.injection.ValueInjectionExam">
<property name="name">
<value>onj</value>
</property>
<property name="age">
<value>6</value>
</property>
</bean>
</beans>
 빈 정의 XML 파일에서 property 태그의 value 태그로 값을 지정하며 String으로 값을 읽는다.
 property의 value를 주입 받는 빈에서는 setter를 만들어야 한다.
 [자바 코드]
private String name;
private String age;
//빈 정의 XML에서 name이라는 Property의 value 값을 주입 받음
public void setName(String name) { this.name = name; }
//빈 정의 XML에서 age라는 Property의 value 값을 주입 받음
public void setAge(String age) { this.age = age; }
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-7. SpEL을 이용한 Value Injection(XML 방식)
 Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application
Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.
 [app-context2.xml]
<?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">
<bean name="onj" class="onj.spel.injection.Onj"/>
<bean name="sample" class="onj.spel.injection.SpelInjectionExam">
<property name="name">
<value>#{onj.name}</value>
<!-- Onj 클래스에는 Getter가 만들어져 있어야 한다. -->
</property>
<property name="age">
<value>#{onj.age}</value>
</property>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-7. SpEL을 이용한 Value Injection(XML 방식)
 Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application
Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.
 [Onj.java]
package onj.spel.injection;
public class Onj {
private String name="OnJ";
private String age = "10";
/*
app-context2.xml에서 SpelInjectionExam 에 값을 주입하기 위해 getter만 만듬
#{onj.name} 구문에 의해 getter가 호출되고 그 값이 SpelInjectionExam에 주입된다.
*/
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-7. SpEL을 이용한 Value Injection(XML 방식)
 Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application
Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.
 [SpelInjectionExam.java]
package onj.spel.injection;
import org.springframework.context.support.GenericXmlApplicationContext;
public class SpelInjectionExam {
private String name;
private String age;
// 빈 정의 XML에서 name이라는 Property의 value 값을 주입 받음
public void setName(String name) {
this.name = name;
}
// 빈 정의 XML에서 age라는 Property의 value 값을 주입 받음
public void setAge(String age) {
this.age = age;
}
// 빈 정의 XML에서 age라는 Property의 value 값을 주입 받음
public void setAge(String age) {
this.age = age;
}
public String toString() {
return "This is spel injection example... " +
"Your name is " + name + " age is " + age;
}
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:app-context2.xml");
ctx.refresh();
SpelInjectionExam sample = (SpelInjectionExam) ctx.getBean("sample");
System.out.println(sample);
}
}
[결과]
This is spel injection example... Your name is OnJ age is 10
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)
 [app-context3.xml]
<?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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:annotation-config/>
<context:component-scan base-package="onj.spel.annotation" />
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)
 [Onj.java]
package onj.spel.injection;
public class Onj {
private String name="OnJ";
private String age = "10";
/*
app-context2.xml에서 SpelInjectionExam 에 값을 주입하기 위해 getter만 만듬
#{onj.name} 구문에 의해 getter가 호출되고 그 값이 SpelInjectionExam에 주입된다.
*/
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)
 [SpelInjectionExam.java]
package onj.spel.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.stereotype.Service;
@Service("sample")
public class SpelInjectionExam {
private String name;
private String age;
/* Onj객체의 getName을 호출해 값을 세팅 */
@Value("#{onj.name}")
public void setName(String name) {
this.name = name;
}
/* Onj객체의 getAge를 호출해 값을 세팅 */
@Value("#{onj.age}")
public void setAge(String age) {
this.age = age;
}
public String toString() {
return "This is spel injection example... " + "Your name is " + name + ", age is " + age;
}
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:app-context3.xml");
ctx.refresh();
SpelInjectionExam sample = (SpelInjectionExam) ctx.getBean("sample");
System.out.println(sample);
}
}
[결과]
This is spel injection example... Your name is OnJ age is 10
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)
 하나의 빈을 다른 빈에 주입하기 위해 두 개의 빈 설정이 필요한데 하나의 빈은 주입될 빈이고, 다른 빈은 타깃이 되는 빈에
대한 설정이다. 주입될 빈과 타깃에서 setter로 정의한 빈은 서로 호환이 되기만 하면 된다. (타깃에서 정의한 빈이 인터페이
스이면 주입될 빈은 인터페이스를 구현한 클래스면 된다.)
 빈 정의는 같은 XML 파일 내에 있어야 하는데 만약 다른 이름의 빈을 주입하거나 다른 설정파일에서 빈을 찾으려면 <ref>
태그의 bean 속성을 사용해야 한다.
 ref태그를 사용하여 주입하며 ref태그는 항상 property 나 constructor-arg 다음에 나와야 한다.
 [app-context4.xml]
<?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">
<bean id="onj" name="onjName" class="onj.ref.injection.Onj"/>
<bean id="sample" name="sampleName" class="onj.ref.injection.RefInjectionExam">
<property name="onj">
<ref bean="onj"/> <!-- ref 태그는 빈의 id로 빈을 찾는다. -->
</property>
</bean>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)
 [Onj.java]
package onj.ref.injection;
public class Onj {
private String name="OnJ";
private String age = "10";
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
 [RefInjectionExam.java]
package onj.ref.injection;
import
org.springframework.context.support.GenericXmlApplicationContext;
public class RefInjectionExam {
private Onj onj;
public void setOnj(Onj onj) { this.onj = onj;}
public String toString() {
return "This is ref injection example... " +
"Your name is " + onj.getName() + ", age is " +onj.getAge();
}
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:app-context4.xml");
ctx.refresh();
RefInjectionExam sample = (RefInjectionExam) ctx.getBean("sample");
System.out.println(sample);
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)
 bean vs local
1. <ref bean=“onjBean”/>
가장 일반적인 형태,
동일한/상위 Bean Factory or
Application Context 내에서 자
바 빈을 검색, 물론 동일한 XML
설정 파일 내부가 아니더라도
관계 없다. 찾고자 하는 onj
Bean은 id, name 어느 것이나
정의되어 있으면 된다.
2. <ref local= “onjBean” />
동일한 XML 설정 파일내에서
onjBean을 검색하며 onjBean은
bean정의의 id, name 어느 것
이나 정의되어 있으면 된다.
Spring4에서 local을 더 이상 사
용하지 않는다. 스프링4 이상이
라면 <ref bean=“”/>을 사용하
자.
 빈 정의시 id 와 name의 차이
 id or bean은 하나의 XML 파일에서는 하나만 정의가능(유일)
 id는 오로지 하나, name은 여러 개 정의 가능하다.
<bean id="foo" name = "foo1, foo2" class="ojc.Foo"/>
Foo f1 = (Foo) context.getBean("foo");
Foo f2 = (Foo) context.getBean("foo1");
Foo f3 = (Foo) context.getBean("foo2");
 다른 설정파일에 name이 같은 빈을 정의할 수 있다. id는 불가.
1. [bean1.xml]
<bean id="foo" name = "king,
queen" class="ojc.Foo"/>
2. [bean2.xml]
<bean id="bar" name = "king" class="ojc.Bar"/>
FileSystemXmlApplicationContext context =
new FileSystemXmlApplicationContext(new String[] { "beans2.xml", "beans1.xml" });
Foo f = (Foo) context.getBean("king");
bean1.xml 파일이 나중에 로딩되므로 bean1.xml의 king이 로드된다.
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-10. 스프링에서 XML 설정 파일의 분리
: XML 설정파일을 여러 개로 분리할 수 있으며 이 경우 ref bean 태그를 사용하여 자바 빈을 로딩 하면 된다.
Application Context를 생성할 때 여러 XML 파일명을 문자열 배열로 넣어주면 된다.
 [Dog.java]
package ojc.spring.twoxml;
public interface Dog {
public void jitda();
}
 [Jindo.java]
package ojc.spring.twoxml;
import
org.springframework.stereotype.Component;
public class Jindo implements Dog{
public void jitda() {
System.out.println("진도진도~");
}
}
 [Pudle.java]
package ojc.spring.twoxml;
import
org.springframework.stereotype.Component;
public class Pudle implements Dog {
public void jitda() {
System.out.println("푸들푸들~");
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-10. 스프링에서 XML 설정 파일의 분리
 [DogManager.java]
package ojc.spring.twoxml;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
public class DogManager {
private Pudle pudle;
private Jindo jindo;
public void setPudle(Pudle pudle) {
this.pudle = pudle;
}
public void setJindo(Jindo jindo) {
this.jindo = jindo;
}
public void walwal() {
this.jindo.jitda();
this.pudle.jitda();
}
}
 [DogApp.java]
package ojc.spring.twoxml;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class DogApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[]
{"applicationContext.xml", "dog.xml"});
DogManager dManager = (DogManager)
context.getBean("dogManager");
dManager.walwal();
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-10. 스프링에서 XML 설정 파일의 분리
 [DogManager.java]
[src/main/resources/applicationContext.xml]
<?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/schem
a/beans http://www.springframework.org/schema/beans/spring-beans-
4.2.xsd">
<bean id="dogManager" class="ojc.spring.twoxml.DogManager">
<property name="pudle">
<ref bean="pudle"></ref>
</property>
<property name="jindo">
<ref bean="jindo"></ref>
</property>
</bean>
</beans>
 [src/main/resources/dog.xml]
<?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">
<bean id="pudle" class="ojc.spring.twoxml.Pudle"/>
<bean id="jindo" class="ojc.spring.twoxml.Jindo"/>
</beans>
[결과]
진도진도~
푸들푸들~
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-11. Application Context의 분리(부모, 자식)
: 한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다. 자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는 빈 참조 가능한데
스프링은 ApplicationContext 중첩 기능을 제공 함으로서 설정을 여러 파일로 나눌 수 있게 해준다. 자식 컨텍스트에
서 부모 컨텍스트의 빈을 참조하는 방식은 동일하다. 단 이름이 같은 것이 있다면 ref 태그에서 parent 속성을 사용하
면 된다.
 [parent.xml]
<?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">
<bean id="parent1" class="java.lang.String">
<constructor-arg>
<value>parent bean 1</value>
</constructor-arg>
</bean>
<bean id="parent2" class="java.lang.String">
<constructor-arg>
<value>parent bean 2</value>
</constructor-arg>
</bean>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-11. Application Context의 분리(부모, 자식)
 [child.xml]
<?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">
<bean id="target1" class="onj.context.overlap.Onj">
<property name="val1">
<ref bean="parent1"/>
</property>
</bean>
<bean id="target2" class="onj.context.overlap.Onj">
<property name="val2">
<ref parent="parent2"/> <!– 부모 context에서 parent2라는 id,name을 검색 
</property>
</bean>
<bean id="parent2" class="java.lang.String">
<constructor-arg>
<value>child bean 2</value>
</constructor-arg>
</bean>
</beans>
 [Onj.java]
package onj.context.overlap;
public class Onj {
private String val1;
private String val2;
public String getVal1() {
return val1;
}
public void setVal1(String val1) {
this.val1 = val1;
}
public String getVal2() {
return val2;
}
public void setVal2(String val2) {
this.val2 = val2;
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-11. Application Context의 분리(부모, 자식)
 [ContextOverlapExam.java]
package onj.context.overlap;
import org.springframework.context.support.GenericXmlApplicationContext;
public class ContextOverlapExam {
public static void main(String[] args) {
GenericXmlApplicationContext parent = new GenericXmlApplicationContext();
parent.load("classpath:parent.xml");
parent.refresh();
GenericXmlApplicationContext child = new GenericXmlApplicationContext();
child.load("classpath:child.xml");
child.setParent(parent);
child.refresh();
Onj target1 = (Onj) child.getBean("target1");
Onj target2 = (Onj) child.getBean("target2");
String target3 = (String) child.getBean("parent2");
System.out.println(target1.getVal1());
System.out.println(target2.getVal2());
System.out.println(target3);
}
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-12. 컬렉션 주입(Collection Injection), XML 방식
 [app-context5.xml]
<?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">
<bean id="onj" name="onjName" class="onj.injection.collection.Onj"/>
<bean id="sample" class="onj.injection.collection.CollectionExam">
<property name="map">
<map>
<entry key="someValue">
<value>hello map...</value>
</entry>
<entry key="someBean">
<ref bean="onj"/>
</entry>
</map>
: 한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다. 자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는 빈 참조 가능한데
스프링은 ApplicationContext 중첩 기능을 제공 함으로서 설정을 여러 파일로 나눌 수 있게 해준다. 자식 컨텍스트에
서 부모 컨텍스트의 빈을 참조하는 방식은 동일하다. 단 이름이 같은 것이 있다면 ref 태그에서 parent 속성을 사용하
면 된다.
</property>
<property name="set">
<set>
<value>hello list...</value>
<ref bean="onj"/>
</set>
</property>
<property name="props">
<props>
<prop key="firstName">Jong Cheol</prop>
<prop key="lastName">Lee</prop>
</props>
</property>
</bean>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-12. 컬렉션 주입(Collection Injection), XML 방식
 [CollectionExam.java]
public void display() {
for(Map.Entry<String, Object> entry:map.entrySet()) {
System.out.println("Key: " + entry.getKey() + "-" + entry.getValue());
}
for(Map.Entry<Object, Object> entry : props.entrySet()) {
System.out.println("key : " + entry.getKey() + "-" + entry.getValue() );
}
for(Object obj : set) {
System.out.println("value : " + obj);
}
}
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:app-context5.xml");
ctx.refresh();
CollectionExam col = (CollectionExam)ctx.getBean("sample“)
col.display();
}
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-12. 컬렉션 주입(Collection Injection), 어노테이션 방식
 [app-context6.xml]
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<context:annotation-config/>
<context:component-scan base-package="onj.collection.annotation" />
<bean id="onj" name="onjName" class="onj.collection.annotation.Onj"/>
<util:map id="map" map-class="java.util.HashMap">
</entry>
<entry key="someBean">
<ref ben="onj"/>
</entry>
</util:map>
<util:properties id="props">
<prop key="firstName">Jong Cheol</prop>
<prop key="lastName">Lee</prop>
</util:properties>
<util:set id="set">
<value>hello.... set</value>
<ref bean="onj"/>
</util:set>
</beans>
2. Spring IoC & DI
2-5. Spring DI(Dependency Injection)
2-5-12. 컬렉션 주입(Collection Injection), 어노테이션 방식
 [Onj.java]
package onj.collection.annotation;
import org.springframework.stereotype.Service;
@Service("onj")
public class Onj {
public String toString() {
return "my name is OnJ";
}
}
 [CollectionAnnotationExam.java]
…
…
@Service("sample")
public class CollectionAnnotationExam {
@Resource(name="map")
private Map<String, Object> map ;
@Resource(name="props")
private Properties props;
@Resource(name="set")
private Set<Object> set;
…
…
…
Any Questions ?
THANK YOU
FOR YOUR ATTENTION
무료국비지원교육 / 구로자바학원 _ 탑크리에듀 교육센터
http://www.topcredu.co.kr

More Related Content

PPTX
Springmvc
PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PPTX
Angular 2 rc5 조사
PDF
okspring3x
PDF
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
Springmvc
5.Spring IoC&DI(DI와 관련된 어노테이션)
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
Angular 2 rc5 조사
okspring3x
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...

What's hot (20)

PDF
[오픈소스컨설팅]Spring 3.1 Core
PDF
Spring Boot 2
PPTX
3.Spring IoC&DI(spring ioc실습, XML기반)
PPTX
Maven
PPTX
메이븐파헤치기(김우용)
PDF
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
PPTX
Angular2를 활용한 컴포넌트 중심의 개발
PPTX
Maven의 이해
PDF
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
PPTX
Spring boot
PPTX
Angular2 NgModule
PPTX
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
PPTX
Jenkins를 활용한 javascript 개발
PPTX
Spring test mvc 발표자료
PPTX
Spring Boot + React + Gradle in VSCode
PDF
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
PPTX
Maven
PDF
AngularJS 2, version 1 and ReactJS
PPTX
Spring boot DI
[오픈소스컨설팅]Spring 3.1 Core
Spring Boot 2
3.Spring IoC&DI(spring ioc실습, XML기반)
Maven
메이븐파헤치기(김우용)
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
Angular2를 활용한 컴포넌트 중심의 개발
Maven의 이해
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
Spring boot
Angular2 NgModule
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
Jenkins를 활용한 javascript 개발
Spring test mvc 발표자료
Spring Boot + React + Gradle in VSCode
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
Maven
AngularJS 2, version 1 and ReactJS
Spring boot DI
Ad

Viewers also liked (14)

PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PDF
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PDF
[구로국비지원IT학원/재직자환급/오라클교육/SQL기초]#21.SQL초보에서 Schema Objects까지
PDF
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
PPTX
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
PDF
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
PDF
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
PDF
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
PDF
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
PDF
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
PPSX
스프링 오픈소스 정리
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
#23.SQL초보에서 Schema Objects까지_SQL기초교육/오라클교육/국비지원환급교육/재직자교육/구로IT학원추천
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
[구로국비지원IT학원/재직자환급/오라클교육/SQL기초]#21.SQL초보에서 Schema Objects까지
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
스프링 오픈소스 정리
Ad

Similar to 스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원 (20)

PPTX
Spring boot-summary(part2-part3)
PDF
Meteor React Tutorial 따라하기
PDF
02.개발환경 실습교재
PPT
Cappuccino fundamental
PPTX
Electron forge
PDF
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
PDF
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PPTX
Nest js 101
PDF
3D 모델러 ADDIN 개발과정 요약
PDF
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
PDF
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
PDF
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
PDF
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PPTX
자바9 특징 (Java9 Features)
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
PPTX
반복적인 작업이 싫은 안드로이드 개발자에게
PPTX
Eclipse RCP 2/2
PPTX
Unity Auto Build iOS
PDF
01.개발환경 교육교재
Spring boot-summary(part2-part3)
Meteor React Tutorial 따라하기
02.개발환경 실습교재
Cappuccino fundamental
Electron forge
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
Nest js 101
3D 모델러 ADDIN 개발과정 요약
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
자바9 특징 (Java9 Features)
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
반복적인 작업이 싫은 안드로이드 개발자에게
Eclipse RCP 2/2
Unity Auto Build iOS
01.개발환경 교육교재

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
[IT교육/IT학원]Develope를 위한 IT실무교육
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]

스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원

  • 1. Spring Framework & MyBatis 스프링 프레임워크 & 마이바티스 강의 탑크리에듀 교육센터
  • 2. 1. 스프링 프레임워크 개요 2. Spring IoC & DI 2.5 Spring DI(Dependency Injection) 2.5.1 세터 주입(Setter Injection) – XML 기반 2.5.2 세터 주입(Setter Injection) – 어노테이션 기반 2.5.3 생성자 주입(Constructor Injection) – XML 기반 2.5.4 생성자 주입(Constructor Injection) – 어노테이션 기반 2.5.5 메소드 주입(Method Injection) 2.5.5.1 Method Injection(Method Replace) 2.5.5.2 Method Injection(Getter Injection) CONTENTS 1. 스프링 프레임워크 개 2.5.6 Simple Value Injection 2.5.7 SpEL을 이용한 Value Injection(XML 방식) 2.5.8 SpEL을 이용한 Value Injection(어노테이션 방식) 2.5.9 ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이) 2.5.10 스프링에서 XML 설정 파일의 분리 2.5.11 ApplicationContext의 분리(부모, 자식) 2.5.12 컬렉션 주입(Collection Injection), XML 방식 2.5.12 컬렉션 주입(Collection Injection), 어노테이션 방식
  • 4. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-1. 세터 주입(Setter Injection) – XML 기반  [Emp.java] package edu.ojc.setter1; interface Emp { public abstract void gotoOffice(); public abstract void getoffWork(); } : 세터주입은 클래스 사이의 의존관계를 연결시키기 위해 setter 메소드를 이용하는 방법이다.  [Programmer.java] package edu.ojc.setter1; class Programmer implements Emp { public void gotoOffice() { System.out.println("프로그래머 출근 합니다."); } public void getoffWork() { System.out.println("프로그래머 퇴근 합니다."); } }
  • 5. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-1. 세터 주입(Setter Injection) – XML 기반  [Designer.java] package edu.ojc.setter1; class Designer implements Emp { public void gotoOffice() { System.out.println("디자이너 출근 합니다."); } public void getoffWork() { System.out.println("디자이너 퇴근 합니다."); } }  [Develop.java] package edu.ojc.setter1; public class Develope { Emp emp; public void setEmp(Emp emp) { this.emp = emp; } void coding() { emp.gotoOffice(); System.out.println("개발합니다..."); emp.getoffWork(); } }
  • 6. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-1. 세터 주입(Setter Injection) – XML 기반  [Src/main/resources/ojc1.xml] – p 네임스페이스를 이용한 세터주입 <?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="programmer" class="edu.ojc.setter1.Programmer" /> <bean id="designer" class="edu.ojc.setter1.Designer" /> <bean id="develope" class="edu.ojc.setter1.Develope" p:emp-ref="programmer" /> <!-- //아래처럼 Property 태그를 이용해도 된다. <bean id="develope" class="edu.ojc.setter1.Develope"> <property name="emp“><ref bean="programmer"/></property> </bean> <bean id="develope" class="edu.ojc.setter1.Develope"> <property name="emp" ref="programmer"/> </bean> --> </beans>  [TestMain.java] package edu.ojc.setter1; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ojc1.xml"); Develope dev = (Develop)context.getBean("develope"); dev.coding(); } }
  • 7. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반  [Emp.java] package edu.ojc.setter2; interface Emp { public abstract void gotoOffice(); public abstract void getoffWork(); }  [Programmer.java] package edu.ojc.setter2; import org.springframework.stereotype.Service; @Service class Programmer implements Emp { public void gotoOffice() { System.out.println("프로그래머 출근 합니다."); } public void getoffWork() { System.out.println("프로그래머 퇴근 합니다."); } }  [Designer.java] package edu.ojc.setter2; import org.springframework.stereotype.Service; @Service class Designer implements Emp { public void gotoOffice() { System.out.println("디자이너 출근 합니다."); } public void getoffWork() { System.out.println("디자이너 퇴근 합니다."); } }
  • 8. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반  [Develop.java] package edu.ojc.setter2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service public class Develope { Emp emp; @Autowired @Qualifier("programmer") public void setEmp(Emp emp) { this.emp = emp; } void coding() { emp.gotoOffice(); System.out.println("개발합니다..."); emp.getoffWork(); } }  [Src/main/resources/ojc2.xml] <?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.2.xsd"> <context:component-scan base- package="edu.ojc.setter2"/> </beans>
  • 9. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반  [TestMain.java] package edu.ojc.setter2; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ojc1.xml"); Develope dev = (Develop)context.getBean("develope"); dev.coding(); } }
  • 10. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-2. 세터 주입(Setter Injection) – 어노테이션 기반  [TestMain.java] package edu.ojc.setter2; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ojc1.xml"); Develope dev = (Develop)context.getBean("develope"); dev.coding(); } }
  • 11. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-3. 생성자 주입(Constructor Injection) – XML 기반  [Emp.java] package edu.ojc.constructor1; interface Emp { public abstract void gotoOffice(); public abstract void getoffWork(); }  [Programmer.java] package edu.ojc.constructor1; class Programmer implements Emp { public void gotoOffice() { System.out.println("프로그래머 출근 합니다."); } public void getoffWork() { System.out.println("프로그래머 퇴근 합니다."); } }  [Designer.java] package edu.ojc.constructor1; class Designer implements Emp { public void gotoOffice() { System.out.println("디자이너 출근 합니다."); } public void getoffWork() { System.out.println("디자이너 퇴근 합니다."); } }
  • 12. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-3. 생성자 주입(Constructor Injection) – XML 기반  [Develop.java] package edu.ojc.constructor1; public class Develope { Emp emp; public Develope(Emp emp) { this.emp = emp; } void coding() { emp.gotoOffice(); System.out.println("개발합니다..."); emp.getoffWork(); } }  [Src/main/resources/ojc3.xml] – C 네임스페이스를 이용한 세터주입 <?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:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="programmer" class="edu.ojc.constructor1.Programmer" /> <bean id="designer" class="edu.ojc.constructor1.Designer" /> <bean id="develope" class="edu.ojc.constructor1.Develope" c:emp- ref="programmer" /> <!-- <bean id="develope" class="edu.ojc.constructor1.Develope"> <constructor-arg ref="programmer"/> </bean> --> </beans>
  • 13. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-3. 생성자 주입(Constructor Injection) – XML 기반  [TestMain.java] package edu.ojc.constructor1; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ojc3.xml"); Develope dev = (Develope)context.getBean("develope"); dev.coding(); } }
  • 14. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반  [Emp.java] package edu.ojc.constructor2; interface Emp { public abstract void gotoOffice(); public abstract void getoffWork(); }  [Programmer.java] package edu.ojc.constructor2; import org.springframework.stereotype.Service; @Service class Programmer implements Emp { public void gotoOffice() { System.out.println("프로그래머 출근 합니다."); } public void getoffWork() { System.out.println("프로그래머 퇴근 합니다."); } }  [Designer.java] package edu.ojc.constructor2; import org.springframework.stereotype.Service; @Service class Designer implements Emp { public void gotoOffice() { System.out.println("디자이너 출근 합니다."); } public void getoffWork() { System.out.println("디자이너 퇴근 합니다."); } }
  • 15. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반  [Develop.java] package edu.ojc.constructor2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service public class Develope { Emp emp; @Autowired public Develope(@Qualifier(value="programmer") Emp emp) { this.emp = emp; } void coding() { emp.gotoOffice(); System.out.println("개발합니다..."); emp.getoffWork(); } }
  • 16. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반  [Src/main/resources/ojc4.xml] <?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.2.xsd"> <context:component-scan base- package="edu.ojc.constructor2"/> </beans>
  • 17. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-4. 생성자 주입(Constructor Injection) – 어노테이션 기반  [TestMain.java] package edu.ojc.constructor2; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ojc4.xml"); Develope dev = (Develop)context.getBean("develope"); dev.coding(); } }
  • 18. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-5. 메소드 주입(Method Injection) : Method 정의 전체에 Bean을 주입하는 것으로 Method Replace와 Getter Injection으로 구별할 수 있다.  Method Replace(메소드 대체) : 기존 메소드를 런타임 중에 새로운 구현으로 대체  Getter Injection(게터 주입) : 기존 메소드를 런 타임 중에 spring Context로 부터 특정한 빈을 반환하 는 새로운 구현으로 대체. Method 주입의 특별한 경우로 Method가 특정 타입의 빈을 반환하도록 선언 해 두고(보통 abstract) 런타임 중 실제 반환되는 빈은 Spring Context에서 오도록 하는 방법 2-5-5-1. Method Injection(Method Replace)  [Emp.java] package ojc1; public interface Emp { public String work(); }  [Programmer.java] package ojc1; public class Programmer implements Emp { public String work() { return "Programmer Working..."; } }
  • 19. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-5. 메소드 주입(Method Injection) 2-5-5-1. Method Injection(Method Replace)  [Designer.java] package ojc1; import java.lang.reflect.Method; import org.springframework.beans.factory.support.MethodReplacer; import org.springframework.stereotype.Service; public class Designer implements MethodReplacer { public Object reimplement(Object target, Method method, Object[] args) throws Throwable { return "Designer Working..."; } }  [MethodReplaceTest.java] package ojc1; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MethodReplaceTest { Emp programmer; public void setProgrammer(Programmer programmer) { this.programmer = programmer; } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("lookup.xml"); MethodReplaceTest test = (MethodReplaceTest) context.getBean("methodReplaceTest"); //Programmer의 work()가 아닌 대체자인 Designer의 work()가 실행됨 System.out.println(test.programmer.work()); } }
  • 20. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-5. 메소드 주입(Method Injection) 2-5-5-1. Method Injection(Method Replace)  [/src/main/resources/lookup.xml] <?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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <bean id="programmer" class="ojc1.Programmer"> <replaced-method name="work" replacer="designer" /> </bean> <bean id="designer" class="ojc1.Designer" /> <bean id="methodReplaceTest" class="ojc1.MethodReplaceTest"> <property name="programmer" ref="programmer"/> </bean> </beans>
  • 21. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-5. 메소드 주입(Method Injection) 2-5-5-2. Method Injection(Getter Injection)  [/src/main/resources/lookup.xml] <?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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <bean id="programmer" class="ojc1.Programmer"> <replaced-method name="work" replacer="designer" /> </bean> <bean id="designer" class="ojc1.Designer" /> <bean id="methodReplaceTest" class="ojc1.MethodReplaceTest"> <property name="programmer" ref="programmer"/> </bean> </beans>
  • 22. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-5. 메소드 주입(Method Injection) 2-5-5-2. Method Injection(Getter Injection)  [EmpTest.java] package ojc2; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class EmpTest { public static void main(String[] args) throws Exception{ ApplicationContext ctx = new ClassPathXmlApplicationContext("emp.xml"); Emp emp = (Emp) ctx.getBean("emp"); emp.work(); } }
  • 23. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-6. Simple Value Injection  [XML] <?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"> <bean name="sample" class="onj.value.injection.ValueInjectionExam"> <property name="name"> <value>onj</value> </property> <property name="age"> <value>6</value> </property> </bean> </beans>  빈 정의 XML 파일에서 property 태그의 value 태그로 값을 지정하며 String으로 값을 읽는다.  property의 value를 주입 받는 빈에서는 setter를 만들어야 한다.  [자바 코드] private String name; private String age; //빈 정의 XML에서 name이라는 Property의 value 값을 주입 받음 public void setName(String name) { this.name = name; } //빈 정의 XML에서 age라는 Property의 value 값을 주입 받음 public void setAge(String age) { this.age = age; }
  • 24. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-7. SpEL을 이용한 Value Injection(XML 방식)  Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.  [app-context2.xml] <?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"> <bean name="onj" class="onj.spel.injection.Onj"/> <bean name="sample" class="onj.spel.injection.SpelInjectionExam"> <property name="name"> <value>#{onj.name}</value> <!-- Onj 클래스에는 Getter가 만들어져 있어야 한다. --> </property> <property name="age"> <value>#{onj.age}</value> </property> </beans>
  • 25. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-7. SpEL을 이용한 Value Injection(XML 방식)  Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.  [Onj.java] package onj.spel.injection; public class Onj { private String name="OnJ"; private String age = "10"; /* app-context2.xml에서 SpelInjectionExam 에 값을 주입하기 위해 getter만 만듬 #{onj.name} 구문에 의해 getter가 호출되고 그 값이 SpelInjectionExam에 주입된다. */ public String getName() { return name; } public String getAge() { return age; } }
  • 26. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-7. SpEL을 이용한 Value Injection(XML 방식)  Spring 3.X에서 추가된 기능으로 SpEL을 이용하면 동적으로 표현 식을 해석하고 그 결과를 Spring의 Application Context에서 사용할 수 있다. 결국 동적으로 생성된 값을 다른 자바 빈에 주입할 수 있다.  [SpelInjectionExam.java] package onj.spel.injection; import org.springframework.context.support.GenericXmlApplicationContext; public class SpelInjectionExam { private String name; private String age; // 빈 정의 XML에서 name이라는 Property의 value 값을 주입 받음 public void setName(String name) { this.name = name; } // 빈 정의 XML에서 age라는 Property의 value 값을 주입 받음 public void setAge(String age) { this.age = age; } // 빈 정의 XML에서 age라는 Property의 value 값을 주입 받음 public void setAge(String age) { this.age = age; } public String toString() { return "This is spel injection example... " + "Your name is " + name + " age is " + age; } public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context2.xml"); ctx.refresh(); SpelInjectionExam sample = (SpelInjectionExam) ctx.getBean("sample"); System.out.println(sample); } } [결과] This is spel injection example... Your name is OnJ age is 10
  • 27. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)  [app-context3.xml] <?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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <context:annotation-config/> <context:component-scan base-package="onj.spel.annotation" /> </beans>
  • 28. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)  [Onj.java] package onj.spel.injection; public class Onj { private String name="OnJ"; private String age = "10"; /* app-context2.xml에서 SpelInjectionExam 에 값을 주입하기 위해 getter만 만듬 #{onj.name} 구문에 의해 getter가 호출되고 그 값이 SpelInjectionExam에 주입된다. */ public String getName() { return name; } public String getAge() { return age; } }
  • 29. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-8. SpEL을 이용한 Value Injection(어노테이션 방식)  [SpelInjectionExam.java] package onj.spel.annotation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.stereotype.Service; @Service("sample") public class SpelInjectionExam { private String name; private String age; /* Onj객체의 getName을 호출해 값을 세팅 */ @Value("#{onj.name}") public void setName(String name) { this.name = name; } /* Onj객체의 getAge를 호출해 값을 세팅 */ @Value("#{onj.age}") public void setAge(String age) { this.age = age; } public String toString() { return "This is spel injection example... " + "Your name is " + name + ", age is " + age; } public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context3.xml"); ctx.refresh(); SpelInjectionExam sample = (SpelInjectionExam) ctx.getBean("sample"); System.out.println(sample); } } [결과] This is spel injection example... Your name is OnJ age is 10
  • 30. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)  하나의 빈을 다른 빈에 주입하기 위해 두 개의 빈 설정이 필요한데 하나의 빈은 주입될 빈이고, 다른 빈은 타깃이 되는 빈에 대한 설정이다. 주입될 빈과 타깃에서 setter로 정의한 빈은 서로 호환이 되기만 하면 된다. (타깃에서 정의한 빈이 인터페이 스이면 주입될 빈은 인터페이스를 구현한 클래스면 된다.)  빈 정의는 같은 XML 파일 내에 있어야 하는데 만약 다른 이름의 빈을 주입하거나 다른 설정파일에서 빈을 찾으려면 <ref> 태그의 bean 속성을 사용해야 한다.  ref태그를 사용하여 주입하며 ref태그는 항상 property 나 constructor-arg 다음에 나와야 한다.  [app-context4.xml] <?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"> <bean id="onj" name="onjName" class="onj.ref.injection.Onj"/> <bean id="sample" name="sampleName" class="onj.ref.injection.RefInjectionExam"> <property name="onj"> <ref bean="onj"/> <!-- ref 태그는 빈의 id로 빈을 찾는다. --> </property> </bean> </beans>
  • 31. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)  [Onj.java] package onj.ref.injection; public class Onj { private String name="OnJ"; private String age = "10"; public String getName() { return name; } public String getAge() { return age; } }  [RefInjectionExam.java] package onj.ref.injection; import org.springframework.context.support.GenericXmlApplicationContext; public class RefInjectionExam { private Onj onj; public void setOnj(Onj onj) { this.onj = onj;} public String toString() { return "This is ref injection example... " + "Your name is " + onj.getName() + ", age is " +onj.getAge(); } public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context4.xml"); ctx.refresh(); RefInjectionExam sample = (RefInjectionExam) ctx.getBean("sample"); System.out.println(sample); } }
  • 32. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-9. ref 태그를 이용한 Value Injection(ref local, ref bean, id, name의 차이)  bean vs local 1. <ref bean=“onjBean”/> 가장 일반적인 형태, 동일한/상위 Bean Factory or Application Context 내에서 자 바 빈을 검색, 물론 동일한 XML 설정 파일 내부가 아니더라도 관계 없다. 찾고자 하는 onj Bean은 id, name 어느 것이나 정의되어 있으면 된다. 2. <ref local= “onjBean” /> 동일한 XML 설정 파일내에서 onjBean을 검색하며 onjBean은 bean정의의 id, name 어느 것 이나 정의되어 있으면 된다. Spring4에서 local을 더 이상 사 용하지 않는다. 스프링4 이상이 라면 <ref bean=“”/>을 사용하 자.  빈 정의시 id 와 name의 차이  id or bean은 하나의 XML 파일에서는 하나만 정의가능(유일)  id는 오로지 하나, name은 여러 개 정의 가능하다. <bean id="foo" name = "foo1, foo2" class="ojc.Foo"/> Foo f1 = (Foo) context.getBean("foo"); Foo f2 = (Foo) context.getBean("foo1"); Foo f3 = (Foo) context.getBean("foo2");  다른 설정파일에 name이 같은 빈을 정의할 수 있다. id는 불가. 1. [bean1.xml] <bean id="foo" name = "king, queen" class="ojc.Foo"/> 2. [bean2.xml] <bean id="bar" name = "king" class="ojc.Bar"/> FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(new String[] { "beans2.xml", "beans1.xml" }); Foo f = (Foo) context.getBean("king"); bean1.xml 파일이 나중에 로딩되므로 bean1.xml의 king이 로드된다.
  • 33. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-10. 스프링에서 XML 설정 파일의 분리 : XML 설정파일을 여러 개로 분리할 수 있으며 이 경우 ref bean 태그를 사용하여 자바 빈을 로딩 하면 된다. Application Context를 생성할 때 여러 XML 파일명을 문자열 배열로 넣어주면 된다.  [Dog.java] package ojc.spring.twoxml; public interface Dog { public void jitda(); }  [Jindo.java] package ojc.spring.twoxml; import org.springframework.stereotype.Component; public class Jindo implements Dog{ public void jitda() { System.out.println("진도진도~"); } }  [Pudle.java] package ojc.spring.twoxml; import org.springframework.stereotype.Component; public class Pudle implements Dog { public void jitda() { System.out.println("푸들푸들~"); } }
  • 34. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-10. 스프링에서 XML 설정 파일의 분리  [DogManager.java] package ojc.spring.twoxml; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; public class DogManager { private Pudle pudle; private Jindo jindo; public void setPudle(Pudle pudle) { this.pudle = pudle; } public void setJindo(Jindo jindo) { this.jindo = jindo; } public void walwal() { this.jindo.jitda(); this.pudle.jitda(); } }  [DogApp.java] package ojc.spring.twoxml; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DogApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "dog.xml"}); DogManager dManager = (DogManager) context.getBean("dogManager"); dManager.walwal(); } }
  • 35. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-10. 스프링에서 XML 설정 파일의 분리  [DogManager.java] [src/main/resources/applicationContext.xml] <?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/schem a/beans http://www.springframework.org/schema/beans/spring-beans- 4.2.xsd"> <bean id="dogManager" class="ojc.spring.twoxml.DogManager"> <property name="pudle"> <ref bean="pudle"></ref> </property> <property name="jindo"> <ref bean="jindo"></ref> </property> </bean> </beans>  [src/main/resources/dog.xml] <?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"> <bean id="pudle" class="ojc.spring.twoxml.Pudle"/> <bean id="jindo" class="ojc.spring.twoxml.Jindo"/> </beans> [결과] 진도진도~ 푸들푸들~
  • 36. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-11. Application Context의 분리(부모, 자식) : 한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다. 자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는 빈 참조 가능한데 스프링은 ApplicationContext 중첩 기능을 제공 함으로서 설정을 여러 파일로 나눌 수 있게 해준다. 자식 컨텍스트에 서 부모 컨텍스트의 빈을 참조하는 방식은 동일하다. 단 이름이 같은 것이 있다면 ref 태그에서 parent 속성을 사용하 면 된다.  [parent.xml] <?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"> <bean id="parent1" class="java.lang.String"> <constructor-arg> <value>parent bean 1</value> </constructor-arg> </bean> <bean id="parent2" class="java.lang.String"> <constructor-arg> <value>parent bean 2</value> </constructor-arg> </bean> </beans>
  • 37. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-11. Application Context의 분리(부모, 자식)  [child.xml] <?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"> <bean id="target1" class="onj.context.overlap.Onj"> <property name="val1"> <ref bean="parent1"/> </property> </bean> <bean id="target2" class="onj.context.overlap.Onj"> <property name="val2"> <ref parent="parent2"/> <!– 부모 context에서 parent2라는 id,name을 검색  </property> </bean> <bean id="parent2" class="java.lang.String"> <constructor-arg> <value>child bean 2</value> </constructor-arg> </bean> </beans>  [Onj.java] package onj.context.overlap; public class Onj { private String val1; private String val2; public String getVal1() { return val1; } public void setVal1(String val1) { this.val1 = val1; } public String getVal2() { return val2; } public void setVal2(String val2) { this.val2 = val2; } }
  • 38. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-11. Application Context의 분리(부모, 자식)  [ContextOverlapExam.java] package onj.context.overlap; import org.springframework.context.support.GenericXmlApplicationContext; public class ContextOverlapExam { public static void main(String[] args) { GenericXmlApplicationContext parent = new GenericXmlApplicationContext(); parent.load("classpath:parent.xml"); parent.refresh(); GenericXmlApplicationContext child = new GenericXmlApplicationContext(); child.load("classpath:child.xml"); child.setParent(parent); child.refresh(); Onj target1 = (Onj) child.getBean("target1"); Onj target2 = (Onj) child.getBean("target2"); String target3 = (String) child.getBean("parent2"); System.out.println(target1.getVal1()); System.out.println(target2.getVal2()); System.out.println(target3); } }
  • 39. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-12. 컬렉션 주입(Collection Injection), XML 방식  [app-context5.xml] <?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"> <bean id="onj" name="onjName" class="onj.injection.collection.Onj"/> <bean id="sample" class="onj.injection.collection.CollectionExam"> <property name="map"> <map> <entry key="someValue"> <value>hello map...</value> </entry> <entry key="someBean"> <ref bean="onj"/> </entry> </map> : 한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다. 자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는 빈 참조 가능한데 스프링은 ApplicationContext 중첩 기능을 제공 함으로서 설정을 여러 파일로 나눌 수 있게 해준다. 자식 컨텍스트에 서 부모 컨텍스트의 빈을 참조하는 방식은 동일하다. 단 이름이 같은 것이 있다면 ref 태그에서 parent 속성을 사용하 면 된다. </property> <property name="set"> <set> <value>hello list...</value> <ref bean="onj"/> </set> </property> <property name="props"> <props> <prop key="firstName">Jong Cheol</prop> <prop key="lastName">Lee</prop> </props> </property> </bean> </beans>
  • 40. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-12. 컬렉션 주입(Collection Injection), XML 방식  [CollectionExam.java] public void display() { for(Map.Entry<String, Object> entry:map.entrySet()) { System.out.println("Key: " + entry.getKey() + "-" + entry.getValue()); } for(Map.Entry<Object, Object> entry : props.entrySet()) { System.out.println("key : " + entry.getKey() + "-" + entry.getValue() ); } for(Object obj : set) { System.out.println("value : " + obj); } } public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context5.xml"); ctx.refresh(); CollectionExam col = (CollectionExam)ctx.getBean("sample“) col.display(); }
  • 41. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-12. 컬렉션 주입(Collection Injection), 어노테이션 방식  [app-context6.xml] <?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" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <context:annotation-config/> <context:component-scan base-package="onj.collection.annotation" /> <bean id="onj" name="onjName" class="onj.collection.annotation.Onj"/> <util:map id="map" map-class="java.util.HashMap"> </entry> <entry key="someBean"> <ref ben="onj"/> </entry> </util:map> <util:properties id="props"> <prop key="firstName">Jong Cheol</prop> <prop key="lastName">Lee</prop> </util:properties> <util:set id="set"> <value>hello.... set</value> <ref bean="onj"/> </util:set> </beans>
  • 42. 2. Spring IoC & DI 2-5. Spring DI(Dependency Injection) 2-5-12. 컬렉션 주입(Collection Injection), 어노테이션 방식  [Onj.java] package onj.collection.annotation; import org.springframework.stereotype.Service; @Service("onj") public class Onj { public String toString() { return "my name is OnJ"; } }  [CollectionAnnotationExam.java] … … @Service("sample") public class CollectionAnnotationExam { @Resource(name="map") private Map<String, Object> map ; @Resource(name="props") private Properties props; @Resource(name="set") private Set<Object> set; … … …
  • 43. Any Questions ? THANK YOU FOR YOUR ATTENTION 무료국비지원교육 / 구로자바학원 _ 탑크리에듀 교육센터 http://www.topcredu.co.kr