반응형

#김영한 #스프링 #Spring #인프런 #인프런수업

 


본 포스팅은김영한선생님의
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술
강의를 기반으로 작성되었습니다.

 

 

 

 

 

 

 

Spring Bean 등록하는 2가지 방법

  1. 컴포넌트 스캔과 자동 의존관계 설정
    @Controller , @Service , @Repository 안에 까보면
    모두 컴포넌트 애노테이션이 등록되어있다
  2. 자바 코드로 직접 스프링 빈 등록하기

🌱 그럼 아무거나 등록해서 Annotaction 달면 Bean에 등록되나요 ?

하위패키지가 시작하는 파일과 동일하거나, 하위패키지가 아닌 아이들은 컴포넌트 스캔 대상이 아님으로 빈으로 등록되지 않는다

 

 

 

컴포넌트 스캔과 자동 의존관계

  • @Controller @Service @Repository
    Spring이 시작할때 Spring컨테이너가 생성이된다
    @Controller @Service @Repository 이 작성된 객체들은
    컨테이너에 넣어 놓고 생성을 한 뒤 Spring에서 관리를 한다
    Spring Bean 에 자동 등록 되는 것
  • @Autowired
    컨테이너에 등록된 객체를 가져다가 연결시켜주는 Annotaction

💡 주의 💡
@Autowired를 통한 의존성 주입은 컨트롤러나 서비스 어노테이션과 같이
스프링이 직접 관리하는 객체에서만 동작한다
스프링 빈으로 등록하지 않고 개발자가 직접 생성한 객체에서는 동작이 안된다

 

 

 

 

DI 주입의 방법

  1. 생성자를 통한 주입
    실행 중 동적으로 변하는 경우는 대부분 없어 생성자를 통한 주입을 주로 사용한다
    장점 : 스프링이 조립될때 안전하고 조립된 이후 변화를 주기 어렵기 때문에 비교적 안전하다
  2. 필드를 통한 주입(별로안좋음)
  3. setter를 통한 주입
    단점 : 컨트롤러를 호출할 때 public으로 열려있어 노출된다
    노출이 되기 때문에 조립 이후 누군가가 호출하여 바꿀 수 있기 때문에
    좋은 방법은 아니다

 

 

 

JAVA code를 이용한 Spring bean 등록

  • 직접 설정 파일에 등록하는 것
  • Spring이 시작되는 경로에 SpringConfig 클래스 생성
  
@Configuration  
public class SpringConfig {  
    @Bean  
    public MemberService memberService(){  
        return new MemberService(memberRepository());  
    }  
  
    @Bean  
    public MemberRepository memberRepository(){  
        return new MemoryMemberRespository();  
    }  
}
  • 클래스명에 @Configuration을 작성하고
    생성 후 관리할 객체를 작성한다, @Bean 을 적어줘야함

💡 참고 💡
실무에서는 주로 졍형화된 컨트롤러,서비스,리포지토리 같은 코드는 컴포넌트 스캔을 사용한다
정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 한다면 java code를 이용한 bean등록을 진행한다

반응형
유리쯔의일상