병갈이 블록

1-01.스프링...기본적인 DI설정 본문

IT(Old)/Spring 공부 기록

1-01.스프링...기본적인 DI설정

woojang 2017. 7. 20. 22:11

스프링의 역할. - 조합기.


A라는 클래스를 B와 C에서 사용한다고 가정했을 경우.

A클래스를 A클래스를 상속하는 D클래스로 변경하고자 할 때

A사용하는 B와 C 모두에서 코드를 수정해야한다.

이때 중간다리는 하나 둔다.

E클래스는 A객체를 반환하도록 구성하고 B와 C는 E에서 반환된 A객체를 받아쓴다.

이렇게 되면, A를 D로 바꾸고자 할 때 B와 C는 바꾸지 않아도 된다.

E에서 A객체에 E클래스로 인스턴스화 하도록 수정하면된다.

즉, E클래스 하나만 바꾸면 된다.

이게 조립기의 역할이고 스프링의 역할.


클래스들을 조립하는(서로 연결하는) 방법은 크게 두가지로 나뉜다.

1. XML파일에서 설정해주기.

2. java코드에서 annotation으로 지정하기.

부가적으로

a. XML설정으로 annotation을 지정한 클래스를 등록.

b. Java코드에서 XML파일을 읽어와서 사용.,

 

1. XML파일에서 설정해주기.

- 빈 객체로 등록하기.

: <bean>태그에 id속성에는 사용할 빈 클래스 이름을, class에는 사용하려는 클래스의 전체이름을(패키지이름까지 포함) 적는다.

- 빈 객체 초기화 값 지정.

: <bean>과 </bean> 사이에 초기화 방식에 따른 적절한 값을 넣어준다.

a. 생성자 방식 : <constructor-arg> 태그에 생성자 매개변수로 전달될 값을 넣는다.

- 기본형일 경우 : value속성 및, <value></value>태그로 값을 지정.

- 특정 클래스(빈 객체)일경우 : ref속성 및 <ref bean="빈 객체"/>태그로 빈 객체를 지정한다.

(전달 될 클래스의 경우, 미리 빈 객체로 등록을 해야한다.)

b. 프로퍼티 방식 : <property>태그에 매개변수로 전달될 값을 넣는다. 기본적으로 name속성에 프로퍼티 이름을 지정한다.

(자바빈 규약에 따라 만든 메서드라면 get, set을 때고 첫글자를 소문자로 바꾼 형태가 이름이 된다.)

- 기본형일 경우 : value 속성 또는 <value></value>태그를 이용해서 값을 지정.

- 빈 객체일 경우 : ref속성 및 <ref bean="빈 객체"/>태그로 빈 객체를 지정한다.


2. 자바 코드에서 설정.

*** @Configuration과 @Bean을 사용.

- @Configuration  : 클래스를 스프링 설정으로 사용함을 의미.

- @Bean  : 메서드의 반환형을 빈 객체로 등록

즉, 여기서 생성되는 메서드는 어떤 기능을 구현하는것이 아니라 만들어 놓은 클래스들을 

객체형태로 반환시키는 메서드이다. 이 메서드 내에서 초기화를 구현하면 된다.

생성자 방식이면 "new" 키워드를 사용하여서, 프로퍼티 방식이면 "set프로퍼티이름"메서드를 사용하여서

필요한 값 또는 같은 클래스 내 다른 메서드를 사용하여 초기화를 수행한 뒤 객체를 반환한다.

- name 속성 : 빈 객체의 이름을 지정한다. 기본값으로는 메서드의 이름이 빈 객체의 이름이 된다.

- 메서드끼리 내부에서 사용 가능하다. 단, 하나의 메서드가 여러군데에서 사용 될 때에는 하나의 객체만 공유한다.

(메서드마다 따로따로 객체가 생성되지 않는다. 어디선가 한번 만들어지면, 그녀석이 공유된다.)


A. XML설정에서 자바설정 함께 사용.

- XML에 <context:annotation-config/> 입력.

- @Configuration이 적용된 클래스를 <bean>태그에 등록.(이름은 등록하지 않아도 된다.)


B. 자바설정에서 XML설정 함께 사용.

- @Configuration 밑에 @ImportResource("classpath:파일이름.xml")

(여러파일 임포트시 배열을 이용. @ImportResource( {"classpath:파일이름1.xml", "classpath:파일이름1.xml"} ) )





Comments