[Spring] DI(Dependency Injection) 의존관계 주입
반응형
DI(Dependency Injection) 의존관계 주입
- Iterface 기반을 통해 적용.
- 스프링의 경우 객체의 의존성을 xml에서 설정 가능하기 때문에 컨테이너가 Bean 팩토리 역할로
설정파일에서만 필요한 설정을 적용하면 기존코드를 변경 없이 Dependency의 값을 사용할 수 있다.
- 코드 변경 없이 xml의 설정만으로 개발자가 원하는 개체의 주입으로 바꿀 수 있다.
의존성 주입 예제
InjectionInterface.java
1
2
3
4
5
6 |
package jin.injection;
public interface InjectionInterface {
void printMessage();
}
|
cs |
InjectionImplement.java
1
2
3
4
5
6
7
8
9
10
11
12 |
package jin.injection;
public class InjectionImplement implements InjectionInterface{
@Override
public void printMessage() {
System.out.println("printMessage() 메서드를 출력한다.");
}
}
|
cs |
bean.xml
1
2
3
4
5
6
7
8 |
<?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">
<bean class="jin.injection.InjectionImplement" id="injectionimplement"></bean>
</beans>
|
cs |
InjectionObjectCall.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
package jin.injection;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class InjectionObjectCall {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("src/main/resources/bean.xml");
InjectionInterface injectionInterface = (InjectionInterface) context.getBean("injectionimplement");
injectionInterface.printMessage();
// 기존 생성자를 이용한
// InjectionInterface injectionInterface2 = new InjectionImplement();
// injectionInterface2.printMessage();
}
}
|
cs |
실행 값
기본 생성자 접근을 통한 생성
BasisConstructor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
package jin.a.injection;
public class BasisConstructor {
private static BasisConstructor basisConstructor;
public static BasisConstructor getInstance() {
if (basisConstructor == null) {
basisConstructor = new BasisConstructor();
}
return basisConstructor;
}
private BasisConstructor() {
System.out.println("생성자 호출");
}
public void getMessage() {
System.out.println("getMessage() 메서드 호출");
}
} |
cs |
BasisConstructorCall.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
package jin.a.injection;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BasisConstructorCall {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
BasisConstructor basisConstructor = (BasisConstructor) context.getBean("basisconstructor");
basisConstructor.getMessage();
// BasisConstructor basisConstructor2 = null;
// basisConstructor2 = BasisConstructor.getInstance();
// basisConstructor2.getMessage();
}
}
|
cs |
bean2.xml
1
2
3
4
5
6
7 |
<?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">
<bean class="jin.a.injection.BasisConstructor" id="basisconstructor" ></bean>
</beans> |
cs |
실행값
반응형
'Programming' 카테고리의 다른 글
[Oracle] lock 해제 (0) | 2017.08.03 |
---|---|
[R] 행렬(Matrix) 생성 (0) | 2017.08.03 |
[Spring] Maven 프로젝트 생성시 pom.xml 설정 (0) | 2017.08.03 |
[Java] JDBC 부서등록 과제. (0) | 2017.08.03 |
[R] 벡터(Vector) 생성과 의미 (0) | 2017.08.03 |
댓글