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 |