Spring_AOP

jjyu_my·2024년 10월 20일

Spring

목록 보기
8/10
post-thumbnail

스프링에서의 어노테이션과 의존성 주입


@Service

  • @Service 어노테이션은 스프링에서 서비스 레이어의 클래스를 정의할 때 사용합니다
  • @Service 위치는 클래스 선언 위에 위치해야 합니다
  • 의존성 주입: 이 어노테이션이 붙은 클래스는 스프링의 의존성 주입(Dependency Injection) 컨테이너에 빈(bean)으로 등록됩니다
  • 따라서 다른 컴포넌트에서 이 서비스를 주입받아 사용이 가능합니다
  • @Service는 @Component의 특수한 형태입니다. 그래서 @Component의 기능을 상속받으며, 의미상 서비스 역할을 명확하게 나타내기 위해 사용됩니다
  • 서비스 레이어에서 비즈니스 로직을 담당하는 클래스에 주로 사용되고있습니다
@Service
public class UserService {
    // 비즈니스 로직
}

@Component

  • @Component 어노테이션은 일반적인 컴포넌트를 스프링에게 알려주는 역할을 합니다.
  • @Component가 붙은 클래스는 스프링의 빈으로 등록되며, 다른 컴포넌트에서 의존성 주입을 통해 사용될 수 있습니다.
  • 싱글톤: 스프링은 기본적으로 @Component나 @Service로 등록된 빈을 싱글톤으로 생성하여 관리합니다. - 즉, 애플리케이션 내에서 해당 클래스의 인스턴스는 하나만 존재하게 됩니다.
@Component
public class MyComponent {
    // 컴포넌트 로직
}

@Autowired

  • @Autowired 어노테이션은 스프링의 의존성 주입을 통해 다른 빈(객체)을 자동으로 주입받기 위해 사용합니다.
  • 예를 들어, 특정 서비스 클래스에서 다른 인터셉터나 서비스 클래스를 주입받고자 할 때 사용합니다.
  • 작동 방식은 스프링은 해당 타입의 빈을 찾아 자동으로 주입해 줍니다.
@Service
public class ProductService {
    
    private final UserRepository userRepository;

    @Autowired
    public ProductService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 로직
}

💡 정리

  • @Service와 @Component는 스프링에서 빈을 정의하고 의존성 주입을 위해 사용됩니다.
  • 두 어노테이션 모두 스프링 컨테이너에서 빈으로 관리되며, @Service는 서비스 레이어를 명시적으로 정의하는 데 사용됩니다.
  • @Autowired는 다른 빈을 자동으로 주입받기 위해 사용되며, 주입받는 빈은 클래스의 필드 또는 생성자에 선언할 수 있습니다.
  • 생성자 주입이 일반적으로 더 권장됩니다.
profile

0개의 댓글