Spring DI - Annotation

유재훈·2023년 2월 20일
0

Spring_Study

목록 보기
3/9

Spring Annotation 방식

  • XML파일에는 구동시킬 필수 요소만 작성하고 소스코드에 Annotation으로 표시하여 구동하는 방식

mvc관련 annotation 설정

  • @Contorller
  • @Service
  • @Repository
  • location -> src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
    <annotation-driven />

@Component

  • 객체(컴포넌트)를 나타내는 일반적인 타입으로 태그와 동일한 역할

@Repository

  • 퍼시스턴스(persistence) 레이어
  • 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스
    ex) Data Access Object Class

@Service

  • 서비스 레이어
  • 비즈니스 로직을 가진 클래스
  • 인터페이스가 아닌 클래스에 선언
    ex)
    @Service
    public class ServiceImpl implements Service {}

@Controller

  • 프리젠테이션 레이어
  • 웹 애플리케이션에서 View에서 전달된 웹 요청과 응답을 처리하는 클래스
    ex) Controller Class

의존성 주입시 사용

  • @Autowired
  • @Resource
  • @Value

@Autowired

  • 정밀한 의존 관계 주입(DI)이 필요한 경우에 유용

  • @Autowired는 필드 변수, Setter 메소드, 생성자, 일반 메소드에 적용 가능하며 의존하는 객체를 주입할 때는 주로 Type 이용
    ex) controller은 service의존, service는 dao의존

    public class Controller {
    		@Autowired
    		private Service service;
    }
    
    public class ServiceImpl{
    		@Autowired
    		private Dao dao;
    }

@Resource

  • 애플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용
  • @Resource는 프로퍼티, setter메소드에 적용 가능
  • 의존하는 객체를 주입할 때는 주로 Name 이용

@Autowired와 @Resource 어노테이션

  • 공통점 : @Component로 의존관계를 설정한 객체로부터 의존 관계 자동 주입
  • 차이점 : @Autowired는 타입으로, @Resource는 이름으로 연결

@Value

  • 단순한 값을 주입할 때 사용하는 어노테이션
  • @Value(“Spring”)은 <property ... value=“Spring”/>와 동일

빈 스캐닝(Bean Scanning)

<context:component-scan> 태그

@Component를 통해 자동으로 Bean을 등록하고 @Autowired로 의존 관계를 주입 받는 어노테이션을 클래스에서 선언하여 사용했을 경우 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정을 XML에서 해주어야 하며 이때 사용

<context:component-scan base-package=“com.kh.spring”/>

  • <context:include-filter>태그와 <context:exclude-filter>태그를 같이 사용하면
    자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시 가능

빈 스캐닝(Bean Scanning)

Bean으로 사용될 클래스에 특별한 어노테이션을 부여하고 Spring컨테이너가 이를 통해 자동으로 Bean을 등록하는 방식을 ‘빈 스캐닝을 통한 자동 인식 Bean 등록 기능’이라고 함

  • 장점 :
    어노테이션을 부여하고 자동 스캔으로 빈을 등록하면 XML문서 생성과 관리에 따른 수고를 덜어주고 개발 속도 향상
    개발자 간 XML설정 파일의 충돌을 최소화 시킬 수 있음
  • 단점 :
    애플리케이션에 등록될 Bean이 어떤 것들이 있고, Bean들 간의 의존관계가 어떻게 되는지 한 눈에 파악 불가능

0개의 댓글