springํ๊ฒฝ์์ ์์กด๊ด๊ณ ์ฃผ์ ์ ํฌ๊ฒ @Component,@ComponentScan์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด ๋น์ @Autowired๋ฅผ ์ด์ฉํด์ ์๋์ผ๋ก ์ฃผ์ ํ๋ ์๋์ฃผ์ ๊ณผ @Configuration๋ด์์ @Bean์ ๋ฑ๋กํ๋ฉด์ ์ฃผ์ ํ๋ ์๋์ฃผ์ ์ด ์กด์ฌํฉ๋๋ค.
์ฐ์ di 1ํธ์์ ์ฌ์ฉํ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ก๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์คํ๋ง์ @Autowired๋ฅผ ํตํด์ spring container์ ๋ฑ๋ก๋ ๋น ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก DI ํด์ค๋๋ค
@Autowired
๋ฅผ ํตํด์ ์คํ๋ง ๋น์ ๋ฑ๋ก๋ ๊ฐ์ฒด์ค drink.class๋ฅผ ํฌํจํ ์์๋ค์ class๋ฅผ ์ฃผ์
ํฉ๋๋ค.@Primary
๋ฅผ ์ฌ์ฉํด์ ๋น ์ฃผ์
์ 1์์๋ฅผ ๋ถ์ฌํ๊ฑฐ๋, @Qualifier("๋น์ด๋ฆ")
์ ํตํ mapping์ผ๋ก ์ฃผ์
์ ํ ์ ์์ต๋๋ค.@ComponentScan
์ ํ์ฉํด์ @Component
๊ฐ ๋ถ์ ํด๋์ค๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋กํ๋ ๋น ์๋ ๋ฑ๋ก๊ณผ @Configuration
์ด ๋ถ์ ํด๋์ค ๋ด์์ @Bean
์ ์ด์ฉํด์ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋กํ๋ ๋น ์๋ ๋ฑ๋ก์ด ์์ต๋๋ค.@Autowired
๋ ์ด๋ ๊ฒ ๋ฑ๋ก๋ ๋น์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ฐพ์ต๋๋ค.1. ํ์
๋งค์นญ
2-1 ํ์
๋งค์นญ์ ๊ฒฐ๊ณผ๊ฐ 2๊ฐ ์ด์์ผ ๋ ํ๋ ๋ช
, ํ๋ผ๋ฏธํฐ ๋ช
์ผ๋ก ๋น ์ด๋ฆ ๋งค์นญ
2-2 ํ์
๋งค์นญ์ ๊ฒฐ๊ณผ๊ฐ 2๊ฐ์ด์์ด๋ฉด @Primary,@Qualifier๋ฅผ ์ฐธ์กฐ
๊ทธ๋ ๋ค๋ฉด ์ ๊ตณ์ด ์คํ๋ง ์ปจํ ์ด๋๋ด์์ ๋น์ ๊ด๋ฆฌํ๊ณ ๋ฑ๋กํ๋ฉด์, ์ด๋ฅผ ์ฃผ์ ํ๋ ๊ฑธ๊น์?
๋ฐ๋ก ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๋น์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ง์ฝ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ ํ์ง ์๋๋ค๋ฉด ๋ค์์ฒ๋ผ ๋์ํ ๊ฒ์
๋๋ค.
์ด๋ ๊ฒ ๋์์ ํ๊ฒ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ ์ผ๊ธฐํฉ๋๋ค.
- ๊ณ ๊ฐ ํธ๋ํฝ์ด ์ด๋น 100์ด ๋์ค๋ฉด ์ด๋น 100๊ฐ ๊ฐ์ฒด๊ฐ ํ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋๋ฐ, ์ด ๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํ๋ค.
- ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋ ํ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ผ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ด ๋ฐ๋ํ์ฌ, ๊ฐ์ฒด๋ฅผ ํ์ํฉ๋๋ค. ์ด ๋์ ๋น์ฉ๋ํ ํฝ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ์ฑ๊ธํค ์ปจํ
์ด๋๋ฅผ ์ด์ฉํด์ ๋น์ ๊ด๋ฆฌํฉ๋๋ค.
@Compnent
๋ก ๋น์ ๋ฑ๋กํ๋ ๊ฒ์ด ์๋, ์ง์ ๋น์ ์๋์ผ๋ก ๋ฑ๋กํ ๋ @Configuration
์ด ์ฌ์ฉ๋ฉ๋๋ค.@Configuration
์ ๊ฒฝ์ฐ ComponentScan์ด ๋ ๋ CGLIB ํ๋ก์ ํํ๋ก ๋น์ ์ ์ฅ๋ฉ๋๋ค.@Bean
์ ์๋ ๊ฐ์ฒด๋ @Configuration
ํ๋ก์์์ ๊ฐ๋ก์ฑ์, ๋ฐ์ดํธ ์ฝ๋ ์กฐ์์ ํตํด์ ์ฑ๊ธํค์ ๋ณด์ฅํฉ๋๋ค.@Configuration
์ด ์ ๋ถ์ด์์ผ๋ฉด ์ฑ๊ธํค์ ๋ณด์ฅ๋์ง ์์ต๋๋ค.@Configuration
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String host;
@Value("${spring.data.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<String,String> redisTemplate() {
RedisTemplate<String,String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
์ค๋์ Spring์์ ์ ๊ณตํ๋ DI์ ๊ด๋ จํ ๋ด์ฉ๋ค์ ํ์ตํ์์ต๋๋ค. ์ฑ๊ธํค ์ปจ๋ฐ์ด๋,ํ๋ก์,AOP์ ๋ด์ฉ์ ์ถํ์ ๋ณด์ํด์ ๊ธ๋ก ์ถ๊ฐํ๊ฒ ์ต๋๋ค.