1. DI (Dependency Injection)
2. Spring Container에 저장된 객체를 가져오는 방식이다.
3. 주요 Annotation
1) @Inject
(1) javax.inject.Inject
(2) 타입(class)이 일치하는 객체를 찾아서 가져온다.
(3) 동일한 타입(class)의 객체가 2개 이상 있다면 이름(id)이 일치하는 객체를 가져온다.
(4) 타입(class)과 이름(id)이 일치하는 Bean이 없는 경우 오류가 발생한다.
(5) 가져올 객체의 이름(id)을 지정하기 위해서 @Named(javax.inject.Named)를 사용할 수 있다.
(6) 필요한 디펜던시
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
2) @Resource
(1) javax.annotation.Resource
(2) 이름(id)이 일치하는 객체를 찾아서 가져온다.
(3) 동일한 이름(id)을 가진 객체가 없으면 오류가 발생한다.
(4) 필요한 디펜던시(Javax Annotation API)
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
3) @Autowired
(1) org.springframework.beans.factory.annotation.Autowired
(2) @Inject 기반의 Spring Annotation이다. (타입 기반)
- 타입(class)이 일치하는 객체를 찾아서 가져온다.
- 동일한 타입(class)의 객체가 2개 이상 있다면 이름(id)이 일치하는 객체를 가져온다.
- 타입(class)과 이름(id)이 일치하는 Bean이 없는 경우 오류가 발생한다.
(3) 가져올 객체의 이름(id)을 지정하기 위해서
@Qualifier(org.springframework.beans.factory.annotation.Qualifier)를 사용할 수 있다.
4. DI 처리 방법
1) 객체를 Spring Container에 넣는다. (아래 3가지 방법 중 하나 이용)
(1) <bean> 태그
(2) @Configuration + @Bean
(3) @Component
- 클래스 레벨의 Annotation
- @Component가 추가된 클래스는 자동으로 Spring Container에 객체로 저장된다.
- Controller의 @Controller와 Service의 @Service와 DAO의 @Repository는 모두 @Component를 가지고 있다.
2) @Autowired를 이용해서 Spring Container에서 원하는 타입의 객체를 가져온다. (아래 3가지 방법 중 하나 이용)
(1) 필드에 주입하기
(2) 생성자에 주입하기
(3) Setter 형식의 메소드에 주입하기
5. @Autowired 사용 예시
┌-- Spring Container --┐
│ BoardDto boardDto1 │
│ BoardDto boardDto2 │
└------------------------------┘
1) 필드에 주입하기
@Autowired
private BoardDto boardDto1;
// Spring Container에 BoardDto 타입의 객체가 2개가 있으므로 이름이 일치하는 boardDto1 객체를 가져온다.
@Autowired
private BoardDto boardDto2;
// Spring Container에 BoardDto 타입의 객체가 2개가 있으므로 이름이 일치하는 boardDto2 객체를 가져온다.
@Autowired
@Qualifier(value="boardDto1") // 가져올 객체 이름을 boardDto1으로 지정한다.
private BoardDto b1;
@Autowired
@Qualifier(value="boardDto2") // 가져올 객체 이름을 boardDto1으로 지정한다.
private BoardDto b2;
2) 생성자에 주입하기
private BoardDto boardDto1;
private BoardDto boardDto2;
@Autowired // 스프링 4 이후 생략 가능
public BoardController(BoardDto boardDto1, BoardDto boardDto2) {
// Spring Container에 저장된 객체를 매개변수로 가져온다.
this.boardDto1 = boardDto1;
this.boardDto2 = boardDto2;
}
3) Setter 형식의 메소드에 주입하기
private BoardDto boardDto1;
private BoardDto boardDto2;
@Autowired
public void setBean(BoardDto boardDto1, BoardDto boardDto2) {
// Spring Container에 저장된 객체를 매개변수로 가져온다.
this.boardDto1 = boardDto1;
this.boardDto2 = boardDto2;
}
오늘은 필드!! <bean>태그 활용해서
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
|
package com.gdu.app05.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.gdu.app05.service.BoardService;
@Controller
public class BoardController {
private BoardService boardService;
@Autowired
public void setBoardService(BoardService boardService) {
this.boardService = boardService;
}
@RequestMapping(value="/board/list.do", method=RequestMethod.GET)
public String list(Model model) {
model.addAttribute("boardList", boardService.getBoardList());
return "board/list";
}
}
|
cs |
<bean> 요소는 스프링 빈을 정의하는 역할을 합니다.
class 속성에는 해당 빈의 클래스 경로를 지정합니다.
여기서는 com.gdu.app05.service.BoardServiceImpl 클래스를 사용하여 빈을 생성합니다.
id 속성은 빈의 고유한 식별자로 사용됩니다. 이 경우 "boardService"로 빈을 식별합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean class="com.gdu.app05.service.BoardServiceImpl" id="boardService" />
<bean class="com.gdu.app05.dao.BoardDao" id="boardDao"/>
</beans>
|
cs |
'코딩기록 저장소 🐕 > spring(JPA)🌱' 카테고리의 다른 글
Spring DI ajax (0) | 2023.10.05 |
---|---|
Spring DI 2 (0) | 2023.10.05 |
Spring Mvc 복습, Mvc Redirect (0) | 2023.10.04 |
Spring core 의존관계주입 자동 주입 (김영한의 스프링) (0) | 2023.10.01 |
Spring core 스프링 컨테이너, 컴포넌트스캔(김영한의 스프링) (0) | 2023.09.27 |