๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…)

by YeonBu 2023. 11. 2.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”! ๐Ÿ“ข

 

 

 

 

 

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์‹œ์ž‘ํ•˜๊ธฐ

 

 

 

1. ์ฝ”๋“œ ์ž‘์„ฑ

 

 

AutoAppConfig

@Configuration
@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {




}

 

 

โœ” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € @ComponentScan์„ ์„ค์ • ์ •๋ณด์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

โœ” ๊ธฐ์กด AppConfig์™€๋Š” ๋‹ค๋ฅด๊ฒŒ @Bean์œผ๋กœ ๋“ฑ๋กํ•œ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค.

โœ” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜๋ฉด @Configuration์ด ๋ถ™์€ ์„ค์ • ์ •๋ณด๋„ ์ž๋™๋“ฑ๋ก ๋˜๋Š”๋ฐ ์•ž์„œ ๋งŒ๋“ค์—ˆ๋˜ AppConfig, TestConfig ๋“ค์ด ํ•จ๊ป˜ ๋“ฑ๋ก๋ผ์„œ ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋ž˜์„œ excludeFilter๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ค์ •์ •๋ณด๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ–ˆ๋‹ค.

(๋ณดํ†ต ์„ค์ •์ •๋ณด๋ฅผ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜์ง„ ์•Š์ง€๋งŒ, ๊ธฐ์กด ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๊ณ ์ž ์ด ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ๋‹ค๊ณ  ํ•˜์‹ฌ)

 

 

๐Ÿ’ก ๊ถ๊ธˆ์ฆ

:  excludeFilters ์— ๋Œ€ํ•ด์„œ

 

โ—พ excludeFilters๋Š” @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•„ํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด ์Šค์บ” ๊ณผ์ •์—์„œ ํŠน์ • ํƒ€์ž…์ด๋‚˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ์™ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—พ FilterType ์ข…๋ฅ˜

- ANNOTATION : ํŠน์ • ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค ํ•„ํ„ฐ๋ง

- ASSIGNABLE_TPYE : ์ง€์ •๋œ ํƒ€์ž…๊ณผ ํ• ๋‹น ํ˜ธํ™˜์„ฑ์ด ์žˆ๋Š” ํด๋ž˜์Šค ํ•„ํ„ฐ๋ง

- ASPECTJ : AspectJํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ํ•„ํ„ฐ๋ง

- REGEX : ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ์ด๋ฆ„ ํ•„ํ„ฐ๋ง

- CUSTOM : ์‚ฌ์šฉ์ž ์ •์˜ ํ•„ํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ

 

 

MemoryMemberRepository

@Component
public class MemoryMemberRepository implements MemberRepository{

 

RateDiscountPolicy

@Component
public class RateDiscountPolicy implements DiscountPolicy{

 

MemberServiceImpl

@Component
public class MemberServiceImpl implements MemberService{

    private final MemberRepository memberRepository;

    @Autowired
    public MemberServiceImpl(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

 

OrderServiceImpl

@Component
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

 

 

โœ” ComponentScan์€ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•ด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฏ€๋กœ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋˜๋„๋ก ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

โœ” AppConfig์—์„œ๋Š” @Bean์œผ๋กœ ์ง์ ‘ ์„ค์ • ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์˜์กด๊ด€๊ณ„๋ฅผ ์ง์ ‘ ๋ช…์‹œํ–ˆ๋Š”๋ฐ ์ด์ œ๋Š” ์ด๋Ÿฐ ์„ค์ • ์ •๋ณด ์ž์ฒด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๋„ ๊ฐ ํด๋ž˜์Šค ์•ˆ์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

โœ” @Autowired๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋ฉฐ, ์—ฌ๋Ÿฌ ์˜์กด๊ด€๊ณ„๋„ ํ•œ๋ฒˆ์— ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋ฃฐ์€ ์กฐ๊ธˆ ๋’ค์— ์„ค๋ช…!

 

 

 

 

AutoAppConfigTest

 

public class AutoAppConfigTest {

    @Test
    void basicScan() {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);

        MemberService memberService = ac.getBean(MemberService.class);
        assertThat(memberService).isInstanceOf(MemberService.class);

    }
    
}

 

 

โœ” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ๋‹ฌ๋ผ์ง„ ์ ์€ ์„ค์ •์ •๋ณด๋กœ AutoConfig.class๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค๋Š” ๊ฒƒ. ์‹คํ–‰ํ•ด๋ณด๋ฉด ๊ธฐ์กด๊ณผ ๊ฐ™์ด ์ž˜ ๋™์ž‘ ํ•จ.

โœ” ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๊ฐ€ ์‹ฑ๊ธ€ํ†ค ๋นˆ์œผ๋กœ ์ƒ์„ฑ์ด ๋๊ณ , @Autowired๊ฐ€ ๋ถ™์€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์ž๋™์œผ๋กœ ์˜์กด๊ด€๊ณ„๊ฐ€ ์ฃผ์ž…๋œ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

2. ๋™์ž‘ ์›๋ž˜ ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๊ธฐ

 

 

@ComponentScan, @Component

 

โœ” @ConmponentScan์€ @Component๊ฐ€ ๋ถ™์€ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

โœ” ์ด๋•Œ ์Šคํ”„๋ง ๋นˆ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์€ ํด๋ž˜์Šค ๋ช…์„ ์‚ฌ์šฉํ•˜๋˜ ๋งจ ์•ž๊ธ€์ž๋งŒ ์†Œ๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

(๋นˆ ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด @Component("memberService") ๋กœ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค)

 

 

@Autowired

 

โœ” ์ƒ์„ฑ์ž์— @Autowired๋ฅผ ์ง€์ •ํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•œ๋‹ค.

โœ” ์ด๋•Œ ๊ธฐ๋ณธ ์ ๋žต์€ ํƒ€์ž…์ด ๊ฐ™์€ ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•˜๋ฉฐ, ์ƒ์„ฑ์ž๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์•„๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์คŒ.

(getBean(MemberRepository.class)์™€ ๋™์ผํ•˜๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋จ)

โœ” ํƒ€์ž…์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ๋Š” ๋’ค์—์„œ ์„ค๋ช…ํ•ด์ฃผ์‹ ๋‹ค๊ณ  ํ•จ

 

 

 

 

 

๋ฐ˜์‘ํ˜•

'IT > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ์ค‘๋ณต ๋“ฑ๋ก๊ณผ ์ถฉ๋Œ)  (0) 2023.11.27
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ํ•„ํ„ฐ)  (0) 2023.11.17
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ - @Configration๊ณผ ์‹ฑ๊ธ€ํ†ค)  (0) 2023.10.30
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ - ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ, ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹์˜ ์ฃผ์˜์ )  (0) 2023.10.30
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹ฑ๊ธ€ํ†ค, ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด)  (0) 2023.10.30