Search
Duplicate

Spring DI

Spring DI

: ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋นˆ ๋“ฑ๋ก ๋ฐฉ๋ฒ•

1.
XML ์„ค์ •
a.
root-context.xml
b.
<bean id=โ€โ€ class=โ€โ€ /> ๋นˆ ํƒœ๊ทธ๋กœ ๋“ฑ๋ก
2.
์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋“ฑ๋ก
a.
@Component, @Service, @Repository, @Controller
3.
์ž๋ฐ” ๋นˆ ์„ค์ • ํŒŒ์ผ๋กœ ๋“ฑ๋ก
a.
@Configuration ์„ค์ • ํด๋ž˜์Šค ์ •์˜
b.
@Bean
๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜

๋นˆ ๋“ฑ๋ก - XML ์„ค์ •

โ€ข
root-context.xml
<!-- BoardDAO ๋นˆ์„ ์ •์˜ --> <bean id="boardDAO" class="com.aloha.spring.dao.BoardDAO"> </bean>
XML
๋ณต์‚ฌ

๋นˆ ๋“ฑ๋ก - @์–ด๋…ธํ…Œ์ด์…˜

์–ด๋…ธํ…Œ์ด์…˜
์—ญํ• 
@Component
์ผ๋ฐ˜์ ์ธ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์‚ฌ์šฉ๋จ.
@Controller
Spring MVC ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ„.
@Service
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ„.
@Repository
๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐ์ฒด (DAO)๋ฅผ ๋‚˜ํƒ€๋ƒ„.
โ€ข
servlet-context.xml
<context:component-scan base-package="com.aloha.spring" />
Java
๋ณต์‚ฌ
์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋นˆ์„ ๋“ฑ๋กํ•˜๋ ค๋ฉด, servlet-context.xml ์— ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ํƒœ๊ทธ๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค.
์Šคํ”„๋ง ๋นˆ์„ ๊ฒ€์ƒ‰ํ•  base-package ์†์„ฑ์— ์ง€์ •ํ•˜๋Š” ํŒจํ‚ค์ง€ ํ•˜์œ„์˜ ๊ฒฝ๋กœ์˜ ์žˆ๋Š” ์Šคํ”„๋ง ๋นˆ ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
โ€ข
ํด๋ž˜์Šค
@Component public class MyComponent { }
Java
๋ณต์‚ฌ
์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ํด๋ž˜์Šค๋Š” `@Component` ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์‹œ, ์ธ์‹๋˜์–ด Ioc ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค.
โ€ข
BoardService.java
@Service public class BoardService { }
Java
๋ณต์‚ฌ
`@Service` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ๋นˆ ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜์—ฌ Ioc ์ปจํ…Œ์ดํ„ฐ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.
โ€ข
BoardDAO.java
@Repository public class BoardDAO { }
Java
๋ณต์‚ฌ
`@Repository` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์˜ ํด๋ž˜์Šค์— ์ง€์ •ํ•˜์—ฌ Ioc ์ปจํ…Œ์ดํ„ฐ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.
โ€ข
BoardControler.java
@Controller public class BoardController { }
Java
๋ณต์‚ฌ
`@Controller` ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜์—ฌ Ioc ์ปจํ…Œ์ดํ„ฐ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

๋นˆ ๋“ฑ๋ก - ์ž๋ฐ” ์„ค์ • ํŒŒ์ผ๋กœ ๋“ฑ๋ก(์ปดํฌ๋„ŒํŠธ ์Šค์บ”)

โ€ข
Config.java
@Configuration // ์Šคํ”„๋ง ์„ค์ • ๋นˆ์œผ๋กœ ๋“ฑ๋ก public class Config { // 1. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ // 2. ๋ฉ”์†Œ๋“œ์— @Bean ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜ @Bean // IoC ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก public Board board() { return new Board("์ œ๋ชฉ", "์ž‘์„ฑ์ž", "๋‚ด์šฉ"); } }
Java
๋ณต์‚ฌ
โ€ข
`@Configuration` : ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง์˜ Java ๊ธฐ๋ฐ˜ ์„ค์ • ํด๋ž˜์Šค๋กœ ์ง€์ •
โ€ข
`@Bean` : @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ€์ง„ ํด๋ž˜์Šค ๋‚ด์—์„œ ๋ฉ”์„œ๋“œ์— ๋ถ€์—ฌํ•˜์—ฌ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์Šคํ”„๋ง ๋นˆ(Bean)์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋„๋ก ์ง€์ •
โ€ข
pom.xml
: @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”. CGLIB ์˜์กด์„ฑ์ด ํ•„์š”
<!-- CGLIB --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>3.1</version> </dependency>
XML
๋ณต์‚ฌ

CGLIB

์ž๋ฐ” ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ AOP(Aspect-Oriented Programming)์™€ DI(Dependency Injection)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… ๋ฐฉ๋ฒ•

โ€ข
๊ธฐ๋ณธ ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…
โ€ข
ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ฃผ์ž…
โ€ข
์ƒ์„ฑ์ž ์ฃผ์ž…
โ€ข
๋ฉ”์„œ๋“œ ์ฃผ์ž…

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… ์–ด๋…ธํ…Œ์ด์…˜

โ€ข
@Autowired
โ€ข
@Resource
โ€ข
@Inject

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… ๋ฐฉ๋ฒ•

๊ธฐ๋ณธ ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…

โ€ข
`@Autowired` : ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… ์–ด๋…ธํ…Œ์ด์…˜
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐํ•˜๋„๋ก ์ง€์‹œ
@Autowired private MyBean myBean;
Java
๋ณต์‚ฌ

ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ฃผ์ž…

โ€ข
๋นˆ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ
โ—ฆ
@Autowired
โ—ฆ
@Qualifier("๋นˆ์ด๋ฆ„")
@Autowired @Qualifier("myBean") private MyBean myBean;
Java
๋ณต์‚ฌ

์ƒ์„ฑ์ž ์ฃผ์ž…

@Service public class BoardService { private BoardDAO boardDAO; @Autowired public BoardService(BoardDAO boardDAO) { this.boardDAO = boardDAO; } }
Java
๋ณต์‚ฌ

๋ฉ”์„œ๋“œ ์ฃผ์ž…

@Service public class BoardService { private BoardDAO boardDAO; @Autowired public void setBoardDAO(BoardDAO boardDAO) { this.boardDAO = boardDAO; } }
Java
๋ณต์‚ฌ

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… ์–ด๋…ธํ…Œ์ด์…˜

โ€ข
@Autowired
โ€ข
@Resource
โ€ข
@Inject

@Autowired

@Autowired(required = [false/true])
Java
๋ณต์‚ฌ
@Autowired์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋นˆ ์ด๋ฆ„ ์ง€์ •ํ•ด์„œ ์ฃผ์ž…ํ•˜๋ ค๋ฉด, @Qualifier ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@Autowired ์‚ฌ์šฉ

โ€ข
ํ•„๋“œ(๋ณ€์ˆ˜)์— ์‚ฌ์šฉ
โ€ข
์ƒ์„ฑ์ž์— ์‚ฌ์šฉ
โ€ข
๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ
โ€ข
ํ•„๋“œ(๋ณ€์ˆ˜)์— ์‚ฌ์šฉ
@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { // ํ•„๋“œ์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… @Autowired private BoardDAO boardDAO; // ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. ... }
Java
๋ณต์‚ฌ
โ€ข
์ƒ์„ฑ์ž์— ์‚ฌ์šฉ
@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { private final BoardDAO boardDAO; @Autowired // ์ƒ์„ฑ์ž์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… public BoardServiceImpl(BoardDAO boardDAO) { this.boardDAO = boardDAO; } ... }
Java
๋ณต์‚ฌ
ํ•„๋“œ์— ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…์„ ํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค, ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์ด ๋” ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
โ€ข
์ˆœํ™˜ ์˜์กด์„ฑ ๋ฐฉ์ง€
โ€ข
ํ•„์ˆ˜ ์˜์กด์„ฑ ๊ฐ•์ œ
โ€ข
๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ
@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { private final BoardDAO boardDAO; @Autowired // ๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… public setBoardDAO(BoardDAO boardDAO) { this.boardDAO = boardDAO; } ... }
Java
๋ณต์‚ฌ
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ž๋™์œผ๋กœ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

@Autowired - required ์˜ต์…˜

@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { // ํ•„๋“œ์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… @Autowired(required = false) private BoardDAO boardDAO; // ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. ... }
Java
๋ณต์‚ฌ
โ€ข
@Autowired(required = false)
โ—ฆ
ํ•„์ˆ˜๊ฐ’ ์•„๋‹ˆ๋‹ค.
โ—ฆ
ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด null ๋กœ ์ง€์ •
โ—ฆ
๋“ฑ๋ก๋˜์ง€ ์•Š๋Š” ๋นˆ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์—๋Ÿฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
@Autowired(required = true) [๊ธฐ๋ณธ๊ฐ’]
โ—ฆ
true ์˜ถ์…˜๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ์ƒ๋žตํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
required : ํ•„์ˆ˜ (ํ•„์ˆ˜๊ฐ’ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ)

@Qualifier ์–ด๋…ธํ…Œ์ด์…˜

๊ฐ™์€ ํƒ€์ž…(๋ถ€๋ชจ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค)์˜ ์—ฌ๋Ÿฌ ๋นˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋นˆ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
โ€ข
PostService
public interface PostService { ... }
Java
๋ณต์‚ฌ
โ€ข
BoardServiceImpl
@Service("boardService") // ๋นˆ ์ด๋ฆ„์„ "boardService" ๋กœ ๋นˆ ๋“ฑ๋ก public class BoardServiceImpl implements PostService { }
Java
๋ณต์‚ฌ
โ€ข
CommentServiceImpl
@Service("commentService") // ๋นˆ ์ด๋ฆ„์„ "commentService" ๋กœ ๋นˆ ๋“ฑ๋ก public class CommentServiceImpl implements PostService { }
Java
๋ณต์‚ฌ
โ€ข
Main
@Component public class Main { @Autowired @Qualifier("boardService") // "boardService" ๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ ์ฃผ์ž…(boardServiceImpl) private PostService boardService; @Autowired @Qualifier("commentService") // "commentService" ๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ ์ฃผ์ž…(commentServiceImpl) private PostService commentService; }
Java
๋ณต์‚ฌ
boardServiceImpl, commentServiceImpl ๋‘ ๋นˆ(๊ฐ์ฒด) ๋ชจ๋‘ PostService ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ค ๋นˆ์„ ๊ฐ€์ ธ์˜ฌ ์ง€ ๋ชจํ˜ธํ•ด์ง€๊ณ , ๋˜ํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
@Autowired private PostService boardService;
Java
๋ณต์‚ฌ
๋”ฐ๋ผ์„œ, @Qualifier ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์˜์กด์„ฑ ์ฃผ์ž… ์‹œ ๋นˆ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •ํ™•ํ•œ ๋นˆ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Resource

์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…์„ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ javax ํŒจํ‚ค์ง€์— ๊ธฐ๋ฐ˜ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜
@Resource(name = "๋นˆ ์ด๋ฆ„")
Java
๋ณต์‚ฌ
@Resource ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ๋Š” ๋นˆ ์ด๋ฆ„์„ ๋ฐ”๋กœ ์ง€์ •ํ•ด์„œ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€ข
@Autowired
โ—ฆ
ํŒจํ‚ค์ง€ : org.springframework.beans.factory.annotation
โ—ฆ
Spring ์ „์šฉ์˜ ์–ด๋…ธํ…Œ์ด์…˜
โ—ฆ
ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…
โ€ข
@Resource
โ—ฆ
ํŒจํ‚ค์ง€ : javax.annotation
โ—ฆ
Java ํ‘œ์ค€ ์–ด๋…ธํ…Œ์ด์…˜
โ—ฆ
์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž…

@Resouce ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

โ€ข
ํ•„๋“œ์— ์‚ฌ์šฉ
โ€ข
๋ฉ”์†Œ๋“œ ์— ์‚ฌ์šฉ
โ€ข
ํ•„๋“œ์— ์‚ฌ์šฉ
@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { // ํ•„๋“œ์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… @Resource(name = "boardDAOBean") // ๋นˆ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž… private BoardDAO boardDAO; // ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. ... }
Java
๋ณต์‚ฌ
@Repository("boardDAOBean") // @Repository("๋นˆ ์ด๋ฆ„") public class BoardDAO { ... }
Java
๋ณต์‚ฌ
โ€ข
๋ฉ”์†Œ๋“œ ์— ์‚ฌ์šฉ
@Service // ์˜์กด์„ฑ์„ ์ฃผ์ž… ๋ฐ›๋Š” ํด๋ž˜์Šค๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. public class BoardServiceImpl implements BoardService { private final BoardDAO boardDAO; @Resource("boardDAOBean") // ๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ - ์˜์กด์„ฑ ์ž๋™ ์ฃผ์ž… public setBoardDAO(BoardDAO boardDAO) { this.boardDAO = boardDAO; } ... }
Java
๋ณต์‚ฌ

@Inject

์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์˜์กด์„ฑ ์ฃผ์ž… ์–ด๋…ธํ…Œ์ด์…˜
โ€ข
ํ•„๋“œ ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž…, ๋ฉ”์†Œ๋“œ ์ฃผ์ž… ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข
BeanFactory
โ—ฆ
Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œย ๋ฃจํŠธย ์ธํ„ฐํŽ˜์ด์Šค
โ—ฆ
๋นˆ(Bean) ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ๊ตฌ์„ฑ, ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น
โ€ข
ApplicationContext
โ—ฆ
BeanFactory๋ฅผ ํ™•์žฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค
โ—ฆ
๋นˆ์˜ ๋ฏธ๋ฆฌ ์ดˆ๊ธฐํ™”, ๊ตญ์ œํ™” ์ง€์›, ์ด๋ฒคํŠธ ๋ฐœํ–‰, ๋ฆฌ์†Œ์Šค ๋กœ๋”ฉ ๋“ฑ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
โ—ฆ
AOP ํ†ตํ•ฉ, ์ด๋ฒคํŠธ ๊ฒŒ์‹œ, ๋ชจ๋“  ์œ ํ˜•์˜ Bean ๋ฒ”์œ„ ๋“ฑ์„ ์ง€์›
โ€ข
XmlBeanFactory
โ—ฆ
BeanFactory ๊ตฌํ˜„ ์ค‘ ํ•˜๋‚˜๋กœ, XML ํŒŒ์ผ์—์„œ ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
โ—ฆ
Spring 3.1๋ถ€ํ„ฐ deprecated
โ€ข
AnnotationConfigApplicationContext
โ—ฆ
์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ
โ—ฆ
@Configuration ์–ด๋…ธํ…Œ์ด์…˜๊ณผ @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ • ์ •๋ณด๋ฅผ ์ง€์ •
โ€ข
ClassPathXmlApplicationContext
โ—ฆ
ํด๋ž˜์ŠคํŒจ์Šค(classpath)์—์„œ XML ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ ์Šคํ”„๋ง ๋นˆ์„ ์ปจํ…Œ์ด๋„ˆ
โ—ฆ
์ฃผ๋กœ XML ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•  ๋•Œ ํ™œ์šฉ
โ€ข
FileSystemXmlApplicationContext
โ—ฆ
ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ XML ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ ์Šคํ”„๋ง ๋นˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ
โ—ฆ
ํด๋ž˜์ŠคํŒจ์Šค ์ด์™ธ์˜ ๊ฒฝ๋กœ์—์„œ XML ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ
โ€ข
XmlWebApplicationContext
โ—ฆ
์›น ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ๋นˆ ๋ฐ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ
โ—ฆ
์ฃผ๋กœ ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ

IoC ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋นˆ ๊ฐ€์ ธ์˜ค๊ธฐ

โ€ข
์ปดํฌ๋„ŒํŠธ ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
@Configuration ์„ค์ • ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
XML ์„ค์ •ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

์ปดํฌ๋„ŒํŠธ ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

ApplicationContext context = new AnnotationConfigApplicationContext("com.aloha.spring"); // ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์ง€์ • Board board = context.getBean(Board.class);
Java
๋ณต์‚ฌ

@Configuration ์„ค์ • ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

โ€ข
Config.java
@Configuration // ์Šคํ”„๋ง ์„ค์ • ๋นˆ์œผ๋กœ ๋“ฑ๋ก public class Config { // ๋นˆ์„ ๋“ฑ๋กํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋กœ ์ง€์ • // ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ฒ ๋‹ค. // 1. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ // 2. ๋ฉ”์†Œ๋“œ์— @Bean ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜ @Bean // IoC ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก public Board getBoard() { return new Board("์ œ๋ชฉ", "์ž‘์„ฑ์ž", "๋‚ด์šฉ"); } }
Java
๋ณต์‚ฌ
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); Board board = context.getBean(Board.class);
Java
๋ณต์‚ฌ

XML ์„ค์ •ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

ApplicationContext context = new ClassPathXmlApplicationContext("root-context.xml"); // XML ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ • Board board = context.getBean(Board.class);
Java
๋ณต์‚ฌ
Spring Legacy ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ์ž์›(๋ฆฌ์†Œ์Šค) ํŒŒ์ผ๊ณผ ์„ค์ • ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” src/main/resources ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Spring