의존성 주입의 두 방법인 SETTER를 이용한 방식과 생성자를 이용한 방식을 각각 실습해보겠습니다.
이번 글에서는 setter을 이용한 방식을 사용하고 다음글에서 생성자를 이용한 di기능을 실습하겠습니다.
New-> Project를 선택한 후 java project를 선택하고 next를 클릭합니다.
프로젝트 명을 입력하시고 Finish를 클릭합니다.
이클립스에서 자바 프로젝트를 생성합니다. 자바 프로젝트 생성 시 이클립스의 Perspective를 자바 모드로 변경할지 물으면 Remember my decision 체크박스에 체크하고 Open Perspective를 클릭합니다.
그리고 pro19 아래 새 폴더 lib를 만든 후 여기에 올려놓은 스프링 DI관련 라이브러리를 다운받으신 후 복사해 붙여 넣습니다.
프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭한 후 Build Path > Configure Build Path를 선택합니다.
libraries 탭을 선택하시고 Add Jars... 를 클릭하신후 앞에서 미리 만든 lib폴더의 라이브러리들을 모두 선택한 후 OK를 클릭합니다.
그리고 Apply and Close를 클릭하여 이 내용을 적용합니다.
Project Explorer의 Referenced Libraries에서 jar 파일들을 확인할 수 있습니다.
이제 DI 를 설정하겠습니다. 스프링에서 DI 설정은 XML파일에서 합니다. 따라서 빈을 설정하는 person.xml 파일을 생성합니다.
프로젝트 위에 마우스 오른쪽 버튼을 클릭한 후 New> other...를 선택하고 선택창에서 XML > XML File을 선택하고 next를 클릭합니다.
파일 이름으로 person.xml을 입력하고 Finish를 클릭합니다.
그러면 프로젝트 이름 하위에 person.xml이 생성된 것을 확인할 수 있습니다.
<bean>태그에 사용되는 여러 가지 속성들
속성 이름 | 설명 |
id | 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다. |
name | 객체의 별칭입니다. |
class | 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다. |
constructor-arg | 생성자를 이용해 값을 주입할 때 사용합니다. |
property | setter를 이용해 값을 주입할 때 사용합니다. |
다음과 같이 person.xml을 작성합니다. <beans>태그로 스프링 실행 시 생성할 빈을 설정합니다. 빈은 앞에서도 언급했듯이 스프링을 실행할 때 사용하는 클래스 객체(인스턴스)입니다.
실행 클래스 실행 시 <bean> 태그를 이용해 com.spring.ex01.PersonServiceImpl 클래스에 대한 빈을 생성합니다. 그리고 이 빈에 대해 접근할 수 있는 빈 id를 personService로 지정한 후 <property> 태그를 이용해 PersonServiceImpl 클래스 객체의 name속성에 <value> 태그의 값으로 치괗합니다. 소스 코드에서 new를 이용해 직접 객체를 생성하던 것을 person.xml에서 설정한 것입니다.
이번에는 실습 관련 클래스를 구현하겠습니다.
com.spring.ex01 패키지를 만들고 클래스 파일을 생성합니다.
PersonService 인터페이스를 다음과 같이 작성합니다. 인터페이스 PersonService에 추상 메서드 sayHello()를 선언합니다.
PersonServiceImpl 클래스를 다음과 같이 작성합니다. 구현 클래스 PersonServiceImpl에서 인터페이스 PersonService를 구현하고 setter를 이용해 person.xml에서 <value>태그로 설정한 값을 name 속성에 주입합니다. 단, age 속성은 setter가 없으므로 빈이 생성되더라도 값이 초기화되지 않습니다.
다음과 같이 실행 클래스인 PersontTest클래스를 작성합니다. 라이브러리에서 제공하는 클래스를 이용해 XML파일을 읽어와서 빈을 생성해 사용합니다. 실행 클래스를 실행하면 스프링의 XmlBeanFacory 클래스를 이용해 person.xml의 설정대로 PersonServiceImpl 빈을 메모리에 생성합니다. 이 빈에 대한 id인 personService로 접근하여 sayHello()메서드를 호출합니다.
콘솔에 name 속성 값은 person.xml에서 <value>태그로 설정한 값이 출력되지만 age 속성 값은 0이 출력됩니다.
'2020 > SPRING' 카테고리의 다른 글
스프링 API를 이용한 AOP 기능 구현 과정 (0) | 2020.01.07 |
---|---|
Spring AOP기능 (0) | 2020.01.07 |
회원 기능 이용해 DI 실습 (0) | 2020.01.07 |
Spring 생성자를 이용한 DI 기능 (0) | 2020.01.07 |
프레임워크란? (0) | 2020.01.07 |