DI(Dependency Injection) 




의존성: 클래스 사이의 관계 – has a(포함 관계)

주입: 의존하는 변수의 값을 설정하는 방법

객체지향 프로그래밍언어에서는 의존하는 변수의 값을 설정할 때(의존관계 설정) 

생성자나 setter 메소드를 호출해서 하지만 스프링에서는 이를 beanfactory를 이용해서 설정합니다. 



1) is a : 상속관계                     

2) has a : 포함관계 - 어느 하나의 클래스가 다른 클래스 안에서 사용되는 것 



[DTO]

private int x는 vo라고 한다. 

getter& setter 프로퍼티를 이용한 주입 


2. 의존성 주입 

=> has a  관계에서 포함된 클래스의 객체를 어떻게 대입하느냐 하는 문제 

=> 방법은 객체가 생성될 때 생성자를 이용해서 대입하는 방법이 있고 

  다른 하나는 필요할 때 프로퍼티(setter)를 이용해서 대입하는 방법이 있습니다. 

  

3. 생성자를 이용하는 경우 


<bean id = "" class=""> 

<constructor-arg value=""></constructor-arg>

<bean> 


생성자의 매개변수가 여러 개면 여러 번 반복해서 대입이 가능합니다. 

=> 값이 아니고 다른 bean을 대입하고자 하는 경우에는 <ref bean="빈의 아이디"></ref>


 4. Good 클래스의 객체를 생성해주는 bean 코드를 applicationContext.xml 파일에 생성 

 

 5. applicationContext.xml 파일에 만든 good 이라는 id를 가진 Good 클래스의 객체를 사용하는 코드를 Main 클래스의 main메소드에 작성 

 

 

 Constructor(생성자) 



 =>클래스를 가지고 객체를 생성할 때 호출하는 메소드 

 => new 생성자(매개변수) 의 형태로만 호출할 수 있습니다. 

 => 생성자는 클래스 이름과 동이랗게 만들어야 합니다. 

 => 클래스를 만들면 눈에 보이지는 않지만 매개변수가 없는 생성자가 자동으로 만들어집니다. Default Constructor(매개변수가 없는 생성자)

 => Good 클래스의 경우는 이런 생성자가 숨겨져있습니다. 

 public Good(){

 super() 상위 클래스의 생성자를 호출하는 구문 

 }

 

=>생성자를 직접 만들면 제공되는 생성자는 소멸됩니다. 

=> 생성자는 오버로딩  ( 이름은 같고 매개변수의 개수나 자료형이 다른 경우 ) 가능합니다. 

=> 생성자를 만드는 이유는 객체를 생성할 때 매개변수를 받아서 인스턴변수를 초기화 할 의도나 

객체를 생성할 때, 바로 수행되어야할 내용이 있을 때 사용합니다.

1. Good 클래스에 code 넘겨받아서 code를 설정하는 생성자를 추가 

=> 실행하면 에러가 발생합니다. 

=> 생성자를 만들게 되면 매개변수가 없는 생성자가 제거되고 spring은 별도의 설정이 없으면 매개 변수가 없는 생성자를 

호출해서 객체를 만들기 때문입니다. 


1
2
3
4
5
6
7
//public  Good(String code) {
 
    this.code = code; 
 
}
 
 
cs



2.applicationContext.xml 파일의 Good 객체를 생성할 때 생성자에게 데이터를 넘겨서 매개변수가 있는 생성자를 호출하도록

해주어야합니다. 

1
2
3
4
5
6
7
//이러한 방법은 생성자의 의존성 주입이라고 합니다. 
 
<bean id="good" class="domain.Good">
 
    <constructor-arg value="010"></constructor-arg>
 
</bean>
cs


3. 2번의 코드를 변경 

=> 2번의 코드는 값을 직접 입력한 경우이고 이번의 코드는 다른 빈을 참조하는 코드 

<!-- new String("")을 이용해서 마든 문자열 객체-->
<bean id="code" class="java.lang.String">
<constructor-arg value="232"/>
</bean>
<!-- code라는 bean을 생성자의 첫번째 매개변수로 대입해서 생성한 Good 클래스의 객체 -->
<bean id="good" class="domain.Good">
//ref : 다른 애를 참조한다
<constructor-arg ref="code"></constructor-arg>
</bean>


'Java > 스프링' 카테고리의 다른 글

Spring 2-2 TEST 디렉토리 사용  (0) 2018.04.09
Spring 2-1 Property(속성)  (0) 2018.04.09
Spring 1- 2 DI와 IOC ,@Component @Bean 사용 정리  (0) 2018.04.06
Spring 1-1) IOC 제어의 역전  (0) 2018.04.05
1. Spring의 정의와 특징  (0) 2018.04.05

+ Recent posts