-
(9주차 60일) STS4 설정, 스프링 DI수업 내용 정리 2024. 7. 10. 21:38
STS 설정
target 폴더 파일 보기
: Window -> Show view -> navigation
STS4: Window -> Show view -> navigator / project explorerroot-context.xml
스프링 3.0부터 p:를 활용하여 속성을 통해 setter을 사용할 수 있다.
<bean id="hong" class="com.beyond.di.owner.Owner" p:name="홍길동" p:age="36" p:pet-ref="dog"/>
lombok 설정
- cmd창에서 lombok 파일 열고 java -jar./lombok.jar 입력
- 혹은 맥 -> lombok.jar 열기
- STS 설치 경로 지정 후 설치
터미널 -> cd /Applications/SpringToolSuite4.app/Contents/Eclipse/ -> ls -al 을 통해 폴더에 lombok.jar 확인 - MVNrepository에서 롬복 가장 최신 버전 의존성 추가(pom.xml)
https://mvnrepository.com/artifact/org.projectlombok/lombok
- DI(Dependency Injection)란 하나의 객체가 사용하는(의존하는) 다른 객체를 외부에서 생성하고 주입받아 사용하는 것을 말한다.
- 객체를 주입받는 방법으로는 메소드를 통한 의존성 주입 방법과 생성자를 통한 의존성 주입 방법이 있다.
- 스프링에서 관리하는 객체를 빈(Bean)이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(Bean Factory)라고 한다.
- 스프링에서는 컨테이너가 설정 정보를 읽어와서 자동으로 객체들의 의존 관계를 주입한다.
- 스프링 컨테이너를 통해 의존성을 주입받게 되면 유지 보수가 편해지고 개발자가 작성해야 할 코드가 단순해지며 객체 간의 종속 관계(결합도)를 해소할 수 있다.
- 스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 XML 파일로 작성하는 방식이다.
- 스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 Java 파일로 작성하는 방식이다.
- 스프링 컨테이너가 자바 파일을 설정 파일로 식별하기 위해서는 @Configuration 어노테이션을 클래스에 작성해야 한다.
- 자바 파일에서 빈을 선언하기 위해서는 객체를 리턴하는 메소드를 만들고 @Bean 어노테이션을 메소드에 작성해야 한다.
- 반환되는 객체는 ApplicationContext에서 보관된다.
(어노테이션 설정을 통해 "hong" id를 가지고 Bean으로 등록된다. *default id: 메소드명)
Java 방식 어노테이션
- @Configuration: 스프링 컨테이너가 자바 파일을 설정 파일로 식별하기 위해 클래스에 작성한다.
- @Bean: 자바 파일에서 빈을 선언하기 위해서는 객체를 리턴하는 메소드를 생성하고, 메소드에 작성한다.
* Setter 메소드를 통해 의존 관계가 있는 빈을 주입할 수 있다.
* 생성자를 통해 의존 관계가 있는 빈을 주입할 수 있다. - @Import: 클래스에 작성하여 다른 Java 설정 파일을 가져올 수 있다.
- @Autowired: 스프링 컨테이너에서 빈을 찾아 자동으로 의존성 주입을 할 수 있다. 필드, 메소드, 생성자에 적용할 수 있다.
*예시) 스프링 컨테이너에서 Pet 타입의 pet이라는 객체가 빈으로 등록되어 있는지 찾는다. 해당 빈이 존재하면, owner 객체에 자동으로 의존성을 주입한다. - @Qualifier: 빈에서 특정 객체만 빈에 주입할 수 있도록 한다.
- @Primary: 컨테이너에서 빈을 주입받으려고 할 때 여러 개의 빈이 탐색될 경우, 해당 어노테이션이 있는 메소드를 기본값으로 전달한다.
- @Value: 빈이 아닌 값을 주입할 수 있다.
- @Component: 클래스를 빈으로 선언할 수 있다. 이 때 ComponentScan이 동작할 수 있도록 설정 파일에 활성화해야 한다.
- @ComponentScan의 베이스 패키지로 등록된 주소 하위를 스캔하면서 @Component 어노테이션이 존재하는 클래스를 모두 빈으로 선언한다. 주소 설정이 없는 경우, 해당 어노테이션이 존재하는 클래스를 베이스 패키지로 지정한다.
// JUnit에서 스프링을 사용할 수 있도록 SpringExtension.class를 사용하여 확장한다. // @ContextConfiguration을 통해서 설정 파일을 읽고 애플리케이션 컨텍스트를 생성한다. @ExtendWith(SpringExtension.class) @ContextConfiguration(locations="classpath:spring/root-context.xml") @DisplayName("Owner 클래스 테스트") class OwnerTest { @Autowired @Qualifier("hong") //애플리케이션 컨텍스트는 객체를 자동으로 주입시키려고 함. //따라서 해당 타입(Owner)의 bean을 가지고 있는 지 탐색 후 @Qualifier 설정에 따라 "hong"을 가져와 owner에 주입 //@Qualifier이 없으면 2개의 빈이 탐색되므로 오류 발생함(hong, lee) private Owner owner;
Bean 주입
- 필드에 빈을 주입받는 방법
- Setter 메소드로 빈을 주입받는 방법
- 직접 Setter 메소드를 생성하는 방법
- (@Setter(onMethod_ = @Autowired)) Lombok 어노테이션 사용하여 주입받는 방법
- 생성자로 빈을 주입받는 방법
- 직접 생성자를 생성
- (@RequiredArgsConstructor): NotNull, final 객체만 빈으로 자동 주입한다.
'수업 내용 정리' 카테고리의 다른 글
(2024-07-24) bootstrap.yml 설정 (1) 2024.07.24 (9주차 61일) AOP, STS4 Spring MVC Project 구동 (0) 2024.07.12 (9주차 59일) STS4 설치, 톰캣 설정, 프로젝트 생성 (1) 2024.07.09 (8주차 52일) JSP 구성, 내장 객체 (1) 2024.07.02 (8주차 51일) Servlet, html (0) 2024.07.01