티스토리 뷰
코딩 공부방/스프링 프레임워크
#5강 의존성 주입 (DI dependency Injection) 실습하기 - 명쾌한 스프링 프레임워크 강좌
Digest 2020. 6. 3. 01:04명쾌한 스프링 프레임워크 강좌 - #5 의존성 주입 (DI dependency Injection) 실습하기
의존성 주입 (DI) 복습
- 이전 강좌에서 의존성 주입에 관해 설명한 내용을 복습합니다.
이전까지는 다음과 같이 서비스 클래스의 실행 주도권을 내가 만든 클래스가 가지고 있었다면,
이제부터는 다음과 같이 서비스 클래스의 실행 주도권은 스프링에게 내준다고 배웠습니다.
그래서 이 클래스(학교)는 물론이고 사용되는 클래스(학생)까지 몽땅 생성은 스프링 컨테이너에 맡기는 것이 되었습니다.
프로젝트 만들기
- 프로젝트를 만들어 예제를 실습하시기 난감하신 분들을 위해 블로그 하단에 파일을 첨부해 두었습니다.
프로젝트를 로드하여 사용하시기 바랍니다.
0. 시작 전에 프로젝트에서 pom.xml 설정하기
pom.xml을 열어 properties와 dependencies태그를 복사하여 붙여 넣으세요.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tistory</groupId>
<artifactId>digest1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring-framework.version>4.3.27.RELEASE</spring-framework.version>
<org-aspectj.version>1.9.5</org-aspectj.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org-aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org-aspectj.version}</version>
</dependency>
</dependencies>
</project>
1. 패키지는 com.user.school로 만듭니다.
2. 패키지 내에 School클래스와 Student 클래스, Pencil 클래스를 만듭니다.
단지 이곳에서는 학생에게 "공부해"라는 메서드 하나만 만들고 실행해 볼 것입니다.
2-1. 연필.java
public class Pencil {}
2-2. 학생.java
public class Student {
private Pencil pencil;
public void doStudy(String subject) {
System.out.println(subject + "을 공부하다.");
}
}
2-3. 학교.java
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class School {
public static void main(String[] args) {
AbstractApplicationContext context = new GenericXmlApplicationContext("classpath:com/di/school1/xml/applicationContext.xml");
try {
Student student = (Student)context.getBean("student"); //DI컨테이너에서 생성된 학생객체 가져오기
student.doStudy("스프링");
} finally {
context.close(); //자원 닫기
}
}
}
2-4. applicatoinContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="student" class="com.di.school1.xml.Student" />
</beans>
- 클래스가 아니라 생소한 것이 왔네요. 이건 뭘까요?
이전에 xml을 이용하여 "학생 객체가 필요하니까 미리 만들어 주라!" 하며 스프링 컨테이너에 명시하는 작업이라고 하였습니다.
<bean id="student" class="com.di.school1.xml.Student" />
여기서 이것은 Student클래스를 생성하여 DI컨테이너에 보관하는 작업입니다.
그리고 여기서 id는 객체 하나하나를 식별하기 위함으로써 명명하는 부분입니다.
우리가 java클래스에서 꺼내다 쓸 때 어떻게 객체를 식별하죠? 객체가 한 개라면 문제없겠지만 여러 개라면 어떤 객체를 꺼내 쓸지 지목이 필요합니다.
그러한 의미에서 id를 명시했다고 보시면 됩니다.
- 바로 학교.java 클래스에서 이렇게 student라는 bean을 꺼내다가 쓰게 될 수 있는 것이죠!
Student student = (Student)context.getBean("student"); //DI컨테이너에서 생성된 학생객체 가져오기
아직 bean에 대해 설명드리지 못했네요.
bean이라고 하는 것은 간단하게 말씀드리자면 "객체 하나" 라고 생각하시면 됩니다.
스프링을 처음 배우면서 낯선 용어 하나하나에 관한 정의를 꼼꼼히 배운다는 건 쉬운 일은 아닙니다.
지금 상황에서는 "객체 하나" 정도로만 소화하시는 것이 유익합니다.
- 이클립스에서 실행하기 위해서는 학교.java(실행 앱)에서 Ctrl+F11을 누릅니다.
실행한 것은 분명 학교.java클래스이지만 객체 생성의 주도권은 완전히 스프링에게 넘어간 것을 알 수 있습니다.
- 이렇게 Hello, world 프로젝트가 끝났습니다! 다음 프로젝트부터는 xml을 이용해서 객체를 다루는 방법에 관해 계속 알아보도록 하겠습니다.
'코딩 공부방 > 스프링 프레임워크' 카테고리의 다른 글
#7강 의존성 주입으로 변수값 설정하기 - 명쾌한 스프링 프레임워크 강좌 (0) | 2020.06.05 |
---|---|
#6강 DI init-method, destroy-method - 명쾌한 스프링 프레임워크 강좌 (0) | 2020.06.04 |
#4강 스프링 STS 프로젝트 만들기 - 명쾌한 스프링 프레임워크 강좌 (0) | 2020.06.02 |
#2강 의존성 주입 (DI dependency Injection) - 명쾌한 스프링 프레임워크 강좌 (6) | 2020.05.31 |
#1강 스프링 이해하기 - 명쾌한 스프링 프레임워크 강좌 (0) | 2020.05.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 개발자
- java
- 국가기간전략직종훈련
- 재귀함수
- 알고리즘
- BLOB
- 멱집합
- 국비지원교육
- 미로찾기
- 20대
- 보고서양식
- 데이터베이스
- 퀵정렬
- N-Queens
- 청년구직활동지원금
- html5
- 대학생
- ORM
- 시간복잡도
- 보고서
- 웹개발자
- 반응형레이아웃
- 해커스매거진
- 영문법
- 부분집합
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함