반응형
#김영한 #스프링 #Spring #인프런 #인프런수업
본 포스팅은김영한
선생님의스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술
강의를 기반으로 작성되었습니다.
Spring Bean 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
@Controller , @Service , @Repository 안에 까보면
모두 컴포넌트 애노테이션이 등록되어있다 - 자바 코드로 직접 스프링 빈 등록하기
🌱 그럼 아무거나 등록해서 Annotaction 달면 Bean에 등록되나요 ?
하위패키지가 시작하는 파일과 동일하거나, 하위패키지가 아닌 아이들은 컴포넌트 스캔 대상이 아님으로 빈으로 등록되지 않는다
컴포넌트 스캔과 자동 의존관계
- @Controller @Service @Repository
Spring이 시작할때 Spring컨테이너가 생성이된다@Controller @Service @Repository
이 작성된 객체들은
컨테이너에 넣어 놓고 생성을 한 뒤 Spring에서 관리를 한다
Spring Bean 에 자동 등록 되는 것 - @Autowired
컨테이너에 등록된 객체를 가져다가 연결시켜주는 Annotaction
💡 주의 💡
@Autowired를 통한 의존성 주입은 컨트롤러나 서비스 어노테이션과 같이
스프링이 직접 관리하는 객체에서만 동작한다
스프링 빈으로 등록하지 않고 개발자가 직접 생성한 객체에서는 동작이 안된다
DI 주입의 방법
- 생성자를 통한 주입
실행 중 동적으로 변하는 경우는 대부분 없어 생성자를 통한 주입을 주로 사용한다
장점 : 스프링이 조립될때 안전하고 조립된 이후 변화를 주기 어렵기 때문에 비교적 안전하다 - 필드를 통한 주입(별로안좋음)
- 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등록을 진행한다
반응형
'🌱 𝐅𝐫𝐚𝐦𝐞𝐰𝐨𝐫𝐤 > ⠀⠀⠀⠀ SᴛʀɪɴɢBᴏᴏᴛ' 카테고리의 다른 글
Spring Boot - 웹 MVC개발 :: 회원 웹 기능 조회와 DB접근 (0) | 2023.12.27 |
---|---|
Spring Boot - 웹 MVC개발 :: 회원 가입 구현 (0) | 2023.12.27 |
Spring Boot - 회원관리예제만들기 (0) | 2023.12.27 |
Spring Boot - Spring의 API (0) | 2023.12.27 |
Spring Boot - MVC와 템플릿 엔진 (0) | 2023.12.27 |