본문 바로가기
✨ Back-end/Spring-Legacy

[Spring-Legacy] @Service, @Autowired, @Qualifier 사용법

by 환풍 2023. 8. 24.
728x90
반응형

 

dao.xml

<context:annotation-config/>

이 요소는 스프링 컨테이너가 어노테이션을 사용한 설정을 처리할 수 있도록 해준다.

스프링에서는 @Component, @Autowired, @Qualifier 등과 같은 어노테이션을 사용하여 빈의 생성과 의존성 주입을 설정할 수 있다. 이를 통해 어노테이션들을 스프링 컨테이너가 인식하고 적용하도록 도와준다.

 

<context:component-scan>

이 요소는 지정된 패키지 아래에 있는 클래스들을 검색하고,

스프링의 컴포넌트 스캔 기능을 활용하여 자동으로 빈으로 등록할 수 있게 해준다.

@Component, @Service, @Repository, @Controller 등과 같은 어노테이션을 가진 클래스들을 자동으로 스캔하여 빈으로 등록할 수 있다.

 

DaoMain

 'src/main/java/com/bit/di/basic4/dao.xml' 경로에 있는 XML 설정 파일을 사용하여 스프링 컨테이너를 생성하고 초기화하는 것을 나타낸다.

이렇게 생성된 컨테이너는 스프링의 IoC/DI 기능을 활용하여 빈을 관리하고 의존성을 주입할 수 있게 됩니다.

 

UserDao, UserService 인터페이스

UserDao 인터페이스와 UserService 인터페이스이다. 얘네들을 각 DaoImpl과 ServiceImpl에 implements한다.

 

AdminUserServiceImpl

AdminUserServiceImpl을 사용할 것이다. 얘는 UserService 인터페이스를 implements한 상태이다.

@Service 어노테이션을 붙여주어 이를 Main메소드에서 불러올 것이다.

@Service 

스프링의 컴포넌트 스캔 기능을 활용해 이 클래스를 스프링 빈으로 등록한다. 

@Service 어노테이션은 클래스 레벨에 사용되며, 해당 클래스가 비즈니스 로직을 처리하는 서비스 클래스임을 표시한다.

@Autowired와 @Qualifier

@Autowired 어노테이션은 의존성 주입을 위해 사용되며, 이 경우 @Qualifier 어노테이션과 함께 사용되어 어떤 빈을 주입할지 지정한다. @Qualifier 어노테이션은 여러 개의 동일한 타입의 빈 중에서 특정 빈을 선택하기 위해 사용된다.

 

DaoMain

UserService를 implements 해준 클래스가가 많은데, 여기서 @service로 지정한 클래스 이름을 가져올 수 있다.
(이름 안주면 클래스 이름 첫글자는 소문자.) 그리고 형변환.

Console창에 나타난 'com.bit.di.basic4.AdminUserServiceImpl@7188af83'과 같이 AdminUserServiceImpl의 데이터가 찍히는 것을 확인할 수 있다.

 

AdminUserServiceImpl

AdminUserServiceImpl 까지는 접근완료 했으니, UserDao 인터페이스를 사용해야할 것이다. 현재 UserDao 인터페이스를 많은 impl에서도 사용하고 있고, @Autowired로 주입시킨 상태이다. @Autowired는 여러 곳에서 사용했을 경우 @Qualifier을 사용하여 지칭해줄 수 있는데, 이때 value 값으로 jdbc를 주었다.

register() 메소드에서 UserDao를 사용한 dao.inserDao()를 출력해주게 되는데, value 값으로 jdbc를 찾아가 값을 넣어준다.

 

JdbcDaoImpl

위는 JdbcDaoImpl에서 UserDao 인터페이스를 implements 하여 @Qualifier의 값에 value 값을 찾아준 클래스이다.

여기서 insertDao()메소드를 AdminUserServiceImpl에 가져가 넣어주게된다.

 

DaoMain

이렇게 출력해보면 최종적으로 JdbcDaoImpl의 메소드 값이 출력되게 되는 것이다.

728x90
반응형

댓글