스프링 프로젝트에 Lombok 적용과 의존성 주입(DI) 확인하기
이전 글
2021.05.05 - [Java & Spring/Spring] - 스프링 프레임워크 Lombok 라이브러리 설치
먼저 지난 글에서 Lombok을 설치했다는 가정하에 코드를 작성했습니다. 아직 Lombok을 설치하지 않으셨으면 이전 글을 참고해주세요.
1. 스프링 프로젝트에 lombok 추가
프로젝트의 pom.xml 파일에 <dependency>를 추가합니다.
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
2. 테스트를 위한 <dependency>도 '추가' 혹은 '수정'합니다.
- spring test
- lombok
- log4j version 변경 (기존의 것 삭제 혹은 주석처리)
- junit
<!-- spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
3. 예제 클래스 생성 | 스프링의 의존성 주입 확인을 위한 Annotation 설정
테스트를 하기 위한 클래스 2개를 생성합니다. Chef, Restaurant
■ Chef 클래스를 다음과 같이 작성합니다.
@Data 어노테이션은 lombok 라이브러리의 Data 어노테이션을 설정해준 것입니다.
이클립스의 Outline 영역을 보면, 직접 만들지 않은 함수들이 존재하는 것을 확인할 수 있습니다. (실제 컴파일 시에 생성됨) lombok 라이브러리는 Java 클래스에서 공통으로 많이 사용되는 메서드들을 자동으로 생성해주는 라이브러리라고 한 바 있습니다.
■ Restaurant 클래스는 Chef를 주입받도록 설계합니다. (스프링의 의존성 주입 개념)
@Setter 어노테이션을 사용하여 setChef가 자동으로 생성되었습니다. (실제 컴파일 시에 생성됨)
@Autowired는 스프링이 관리하는 객체들을 엮어주는 기능이라고 볼 수 있습니다.
스프링이 관리하는 객체를 bean이라 표현하는데, @Component 어노테이션이 선언된 객체 즉, bean을 스프링이 관리하고, 관리하는 bean들을 엮어 주는 기능을 어노테이션 @Autowired를 사용해서 처리합니다.
이처럼 클래스들을 어디선가 new 키워드를 사용해 직접 사용자가 선언 & 호출하여 사용하지 않고, 스프링의 기능에 맡겨져서 외부에서 객체에 대한 정보를 제공하는 방식을 의존성 주입이라 할 수 있습니다. (스프링이 어노테이션 정보를 읽고, 객체-bean을 관리하고 주입하는 방식)
└▶ 제가 이해한 내용을 바탕으로 작성한 부분이기 때문에 내용이 틀릴 수 있습니다. 틀렸다면 말씀해주세요.^^
4. XML을 이용하는 의존성 주입 설정
프로젝트의 src 폴더 내에 'root-context.xml'은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 설정 파일입니다.
'root-context.xml' 파일을 열고, 아래 'Namespaces' 탭을 선택하고, 'context' 항목을 체크합니다.
다시 'source' 탭으로 와서 아래 코드를 추가합니다.
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<context:component-scan base-package="com.project.sample">
</context:component-scan>
</beans>
xml 파일을 저장한 뒤 'Beans Graph' 탭을 눌러 확인합니다.
@Component 어노테이션이 세팅되어 스프링이 관리하는 restaurant, chef 두 빈(bean)을 확인할 수 있습니다.
Restaurant 클래스에 @Component 어노테이션을 주석처리를 하니, 'root-context.xml'의 Spring Beans에서는 Restaurant 빈(bean)이 확인되지 않는 것을 볼 수 있습니다.
5. Java를 이용하는 의존성 주입 설정
Java 설정을 이용하는 경우에 'root-context.xml'을 대신하는 것은 RootConfig 클래스를 이용합니다.
XML로 설정된 내용은 RootConfig에서 @ComponentScan 어노테이션을 이용해서 처리할 수 있습니다.
package com.project.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"com.project.sample"})
public class RootConfig {
}
다음 글에서는 스프링이 동작하는 과정에서 어떻게 빈들을 관리해 나가는지 살펴보겠습니다.
도움이 되셨다면 광고 클릭 한 번 해주시면 감사하겠습니다.^^
'java, spring' 카테고리의 다른 글
스프링 프레임워크(Spring framework) 테스트 코드 사용하기 (1) | 2021.05.08 |
---|---|
스프링 프레임워크가 root-context.xml 읽어 들이는 순서 (0) | 2021.05.08 |
스프링 웹 프로젝트를 Java Configuration 으로 설정하기 (0) | 2021.05.05 |
스프링 프레임워크 Lombok 라이브러리 설치 (0) | 2021.05.05 |
스프링 프레임워크 웹 프로젝트 시작하기 Spring Framework Web Project Start (7) | 2021.05.05 |