시스템의 핵심 비즈니스 로직을 구현하는 계층
SNS시스템
이미지, 글 컨텐츠 정보 저장
사용자 컨텐츠 추천, 회원가입, 로그인, 회원 탈퇴 등 회원 관련 처리
view의 종류과 database 종류에 영향을 받지 않는 독립적인 계층이다. 때문에 영향을 받지 않도록 설계해야 한다.
@Service : UserService, PostService, ReplyService, SearchService
@Repository : UserRepository, PostRepository, ReplyRepository, SearchRepository
class PostController
PostService service
= new PostService() // 다른 객체의 기능을 사용하기 위해서 멤버 변수에 new로 객체를 생성하여 참조한다. 명시한다.
method getPost() {
service.getPostById()
}
PostController 클래스는
PostService를 의존한다.
class PostService
method getPostById() {
...
}
객체 생성을 외부에서 대신 수행한다.
활용할 객체에 대한 의존성(참조)설정을 외부에서 대신 해준다.
활용할 클래스(인터페이스)타입의 멤버 변수만 선언한 후 생성자 구현 new 키워드로 객체 생성을 하지 않는다.
Spring Framework가 특정 조건을 만나면 객체를 생성한다.
클래스 상단의 Annotation(@Controller, @RestController, @Service 등)
@Configuration 클래스의 @Bean Annotation
XML 설정
객체로 생성할 대상을 검색하는 과정 -> Component Scan이다.
조건에 따라 객체들의 의존성을 관리
@Configuration
해당 클래스는 Spring Framework에 의해 설정 정보를 위한 클래스로 활용된다.
Configuration클래스 내에 @Bean을 사용한 메소드로 Bean을 생성 가능하다.
@Bean으로 등록할 객체를 생성 후 Return한다.
@Configuration
public class AppConfig {
@Bean
public PostService postService() {
return new PostService(); // spring bean이 된다.
}
}
Java 소스코드, Controller 클래스, Service 클래스
Spring Framework의 설정 정보들 @Controller, @RestController, @Service, @Bean 등
=> Sping IoC컨테이너를 통해 Bean이 생성되고 의존성이 설정 된다.
postcontroller bean을 생성하고
postcontroller로 부터 postservice의 의존성을 생성해준다.
Autowiring by type from bean name 'postController' via constructor to bean named 'postService'
@Configuration
public class AppConfig {
@Bean
public PostService postService() {
return enw PostService();
}
}
log에 보면
Autowiring by type from bean name 'postController' via constructor to bean named 'postService'