스프링 빈이란?
스프링이 객체를 생성해 들고 있는다.
즉, 스프링 컨테이너가 생성될 때 컨트롤러(빈)가 같이 생성된다.
why?
객체를 계속 생성할 필요가 없고 미리 생성해 그것을 사용한다.
빈과 의존관계
컨트롤러(@Controller) -> 서비스
컨트롤러로 요청이 들어오면 서비스를 통해 비즈니스 작업을 해야 하기에 컨트롤러가 서비스에 의존한다.
의존관계 주입방법
컨트롤러, 서비스를 다 빈으로 등록해준다.
의존관계를 생성할 땐 @Autowired를 사용한다.
빈등 록 방식
1. 컴포넌트 스캔
2. 자바 코드로 스프링 빈 등록
빈 등록은 메인 메서드가 있는 패키지부터 시작한다.
즉, 하위 패키지에 있는 것만 등록된다.
자바 코드로 빈 등록하기
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
애노테이션으로 등록하기
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println(joinPoint.toString()+" / timeMs : "+timeMs+"ms");
}
}
}
@Component,@Service,@Repository 대신 자바로 등록할 수 있다.
정형화된 코드(@Service,@Repository)는 컴포넌트 스캔을 사용한다.
또, 생성자로 빈을 생성하는 게 제일 안전하다.
private final MemberRepository memberRepository;
//생성자
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
'개발 소발 > 개발 Spring' 카테고리의 다른 글
Spring form login RSA 암호화 적용 (0) | 2022.08.18 |
---|---|
스프링 웹 개발 기초 정적컨텐츠,MVC,API 란? (0) | 2021.08.09 |
Spring DispatcherServlet 기초개념 (0) | 2020.08.06 |
Spring Environment 기초 사용방법 (0) | 2020.07.13 |
Spring Scope란? (0) | 2020.07.13 |