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의 메소드 값이 출력되게 되는 것이다.
'✨ Back-end > Spring-Legacy' 카테고리의 다른 글
[Spring-legacy] xml로 AOP 어드바이스(Advice) (0) | 2023.08.25 |
---|---|
[Spring-Legacy] @Configuration 과 @Bean, @ComponentScan, @ImportResource (0) | 2023.08.24 |
[Spring-Legacy] properties를 이용해 데이터 출력하기 (0) | 2023.08.23 |
[Spring-Legacy] XML과 @Annotation을 이용해 데이터 출력하기 (0) | 2023.08.23 |
[Spring-Legacy] 스프링 레거시 XML에서 빈(Bean) 정의해보기 (0) | 2023.08.22 |
댓글