Spring Bean

선뀰·2024년 1월 29일
0

Spring

목록 보기
4/9

Spring 서비스 계층

시스템의 핵심 비즈니스 로직을 구현하는 계층

  • SNS시스템
    이미지, 글 컨텐츠 정보 저장
    사용자 컨텐츠 추천, 회원가입, 로그인, 회원 탈퇴 등 회원 관련 처리

  • view의 종류과 database 종류에 영향을 받지 않는 독립적인 계층이다. 때문에 영향을 받지 않도록 설계해야 한다.

  1. 클래스에 @Service Annotation을 사용
  2. 파라미터로 전달 된 데이터들의 검증 작업을 한다
  3. Repository 계층을 활용하여 database에 접근한다.
    Service 계층의 단일 메소드가 transaction의 단위가 된다.
  4. 애플리케이션의 세부 영역(User, Post, ..)별로 클래스를 생성하여 구현한다.
    @Contorller : UserController, PostController, ReplyController, SearchController

@Service : UserService, PostService, ReplyService, SearchService

@Repository : UserRepository, PostRepository, ReplyRepository, SearchRepository

  1. 인터페이스의 사용이 권장 되나, 다형성을 활용한 기능 확장의 요구사항이 없는 경우 사용하지 않기도 한다.

Service의 구현

  • 의존성
    하나의 모듈(클래스, 패키지 등)이 다른 모듈을 사용하는 것
class PostController
PostService service
= new PostService() // 다른 객체의 기능을 사용하기 위해서 멤버 변수에 new로 객체를 생성하여 참조한다. 명시한다.

method getPost() {
	service.getPostById() 
}

PostController 클래스는
PostService를 의존한다.

class PostService
method getPostById() {
... 
}

의존성 주입 (Dependency Injection)

객체 생성을 외부에서 대신 수행한다.
활용할 객체에 대한 의존성(참조)설정을 외부에서 대신 해준다.
활용할 클래스(인터페이스)타입의 멤버 변수만 선언한 후 생성자 구현 new 키워드로 객체 생성을 하지 않는다.

Spring Fromework가 객체의 생성과 관리 역할을 수행한다.

  • Spring Framework가 특정 조건을 만나면 객체를 생성한다.
    클래스 상단의 Annotation(@Controller, @RestController, @Service 등)

  • @Configuration 클래스의 @Bean Annotation

  • XML 설정

  • 객체로 생성할 대상을 검색하는 과정 -> Component Scan이다.

  • 조건에 따라 객체들의 의존성을 관리

Sprint IoC 컨테이너와 Spring Bean

  • Spring IoC 컨테이너
    Spring Framework에서 객체의 생성과 관리의 역할을 하는 컴포넌트
    annotation을 붙인 객체를 spring bean에서 관리한다.
    new키워드를 생성하지 않아도 된다.

@Configuration
해당 클래스는 Spring Framework에 의해 설정 정보를 위한 클래스로 활용된다.

Configuration클래스 내에 @Bean을 사용한 메소드로 Bean을 생성 가능하다.
@Bean으로 등록할 객체를 생성 후 Return한다.

@Configuration
public class AppConfig {
	@Bean
    public PostService postService() {
    	return new PostService(); // spring bean이 된다.
    }
}
  • Spring Bean
    Spring IoC 컨테이너에 의해서 생성되어 관리되는 Java객체

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'

  • Bean을 생성하는 다른 방법
@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'

profile
공부 기록

0개의 댓글