인프런 커뮤니티 질문&답변

highjune님의 프로필 이미지
highjune

작성한 질문수

스프링 핵심 원리 - 고급편

구체 클래스 기반 프록시 - 적용

LogTrace 주입

작성

·

433

0

안녕하세요.

원래 위의 상태에서, 아래에서 ConcreteProxyConfig.class 를 @Bean 으로 등록을 하면 LogTrace 주입이 잘 되는 이유가 궁금하네요.

ConcreteProxyConfig를 @Bean 으로 등록이 되어야만, ConcreteProxyConfig 내에 @Bean 으로 설정한 것들도 @Bean 으로 등록이 되는지는 알겠는데, 그렇다고 LogTrace 이 어떻게 @Bean으로 등록이 되어 주입이 될 수 있는지 궁금합니다.

 

감사합니다.

답변 2

3

안녕하세요. highjune님, 공식 서포터즈 David입니다.

ProxyApplication 내에서 LogTrace가 빈으로 등록되는 코드가 존재합니다.

ConcreteProxyConfig 내 @Bean이 붙은 메서드(이하 빈 생성 메서드)의 파라미터로 LogTrace가 있습니다. 빈 생성 메서드를 통해 빈을 생성하려고 할 때, 파라미터로 들어오는 타입에 해당하는 빈이 있는지 확인합니다. 이 과정에서 LogTrace 타입으로 이미 생성된 빈이 있다면 가져오고, 없다면 생성해서 가져오게 됩니다.

감사합니다.

highjune님의 프로필 이미지
highjune
질문자

감사합니다.

안녕하세요 오래된 질문이지만, 궁금한 점이 있어서 댓글을 남깁니다.

파라미터에 객체변수가 있는 스프링 빈 수동 등록 메서드가 있을 때, 그리고 파라미터에 존재하는 클래스가 스프링 빈으로 등록이 되어 있다면, 파라미터에 존재하는 객체에 대해서 빈 주입은 스프링 컨테이너가 빈등록 메서드를 호출할 때 자동으로 진행한다고 이해했습니다.

그런데 만약 파라미터에 존재하는 클래스가 빈 등록이 안되어 있다면, 컨테이너가 자동으로 생성해서 가져오신다고 했는데 이 부분에 대해서 자료가 없는 거 같아서 여쭤봅니다. 빈이 없으면 생성해서 가져온다는 건 구글링해도 안나오고.. gpt에게 물어봐도 빈이 없으면 오류처리가 될 거라고 답변이 되니 어떤게 사실인지 궁금합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

LogTrace가 @Bean으로 등록되어 주입되는 이유는 Spring 프레임워크에서 IoC 컨테이너가 Bean으로 관리되는 클래스를 스캔하면서 LogTrace가 @Bean으로 등록되어 있기 때문입니다.

스프링에서 @Bean 어노테이션은 Bean으로 등록되는 메서드를 표시하는 역할을 합니다. @Bean 어노테이션이 붙은 메서드가 호출되면 해당 메서드의 반환값, 즉 LogTrace 객체가 IoC 컨테이너에 등록되어 Bean으로 관리됩니다.

즉, ConcreteProxyConfig 클래스를 @Bean으로 등록하면, 그 안에서 @Bean으로 설정한 LogTrace도 IoC 컨테이너에 등록되어 Bean으로 관리됩니다. 이후에 LogTrace가 필요한 클래스에서 @Autowired 어노테이션을 이용하여 주입받을 수 있게 됩니다.

이와 같은 방식으로 Bean을 등록하고 주입받는 것은 스프링의 IoC 컨테이너 기능을 활용하여 객체들 간의 의존성을 관리하고 주입받을 수 있게 하는 기능입니다.

추가적인 설명이 필요하시다면 구체적인 코드나 설정 파일을 알려주시면 더 자세한 설명을 드릴 수 있을 것 같아요. 감사합니다.

안녕하세요, 읽다가 이해가 약간 안되서요

 

이후에 LogTrace가 필요한 클래스에서 @Autowired 어노테이션을 이용하여 주입받을 수 있게 됩니다.

 

이부분이 결국엔 loC 컨테이너에 등록 되고 loC 컨테이너에서 필요한 객체끼리 주입을 시킨다는건가요?

highjune님의 프로필 이미지
highjune

작성한 질문수

질문하기