[Spring] Bean Scope

inยท2023๋…„ 9์›” 11์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
1/7

๐Ÿ“Œ Bean

Spring IoC Container๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด
Spring์—์„œ ์‚ฌ์šฉํ•˜๋Š” POJO ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด

โœ”๏ธ IOC(Inversion Of Control) : ์ œ์–ด์˜ ์—ญ์ „

์ƒํ™ฉ๊ณผ ํ•„์š”์— ๋”ฐ๋ผ Bean์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์–ด๋–ค ํ•œ ์‹œ์ ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ
โžก๏ธ scope๋ฅผ ์„ค์ •ํ•ด์„œ Bean์˜ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

Spring Bean ๋“ฑ๋ก ๋ฐฉ์‹

Component Scan

@Component๋ฅผ ๋ช…์‹œํ•˜์—ฌ bean์„ ์ถ”๊ฐ€

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {

Java ์ฝ”๋“œ๋กœ ๋“ฑ๋ก

@Configuration ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์šฉ

@Configuration
public class AppConfig {

   @Bean
   public MemberRepository memberRepository() {
       return new MemoryMemberRepository();
   }

   @Bean
   public MemberService memberService() {
       return new MemberServiceImpl(memberRepository());
   }

}

@Component vs @Bean

@Component

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ปจํŠธ๋กค์ด ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋“ค์˜ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
  • ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋‹จ์œ„์— ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ
    @Bean
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปจํŠธ๋กค์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
  • ๋ฉ”์†Œ๋“œ ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๋‹จ์œ„์— ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ Scope ์ข…๋ฅ˜

singleton

ํ•ด๋‹น Bean์— ๋Œ€ํ•ด IoC ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌ
(spring์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  bean์„ singleton์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ)

prototype

ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

request

ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ HTTP Request์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌ

session

ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ HTTP Session์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌ

global session

ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ Global HTTP Session์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌ

โœ”๏ธ Scope๋“ค์€ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅ

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
 
@Scope("prototype")
@Component
public class UserController {
}

[์ฐธ๊ณ  ์ž๋ฃŒ]

๐Ÿ”—๋งํฌ
๐Ÿ”—๋งํฌ

0๊ฐœ์˜ ๋Œ“๊ธ€