0. 출처
아직 배우고 있는 중이라 부정확한 정보가 포함되어 있을 수 있습니다!
주의하세요!
올인원 스프링 프레임워크 참고.
1. 도서 대출 관련 기능 구현을 위한 준비

Package, class 추가.
//BookController.java
package com.office.library.book.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/book/user")
public class BookController {
}
Code language: JavaScript (javascript)
//BookService.java
package com.office.library.book.user;
import org.springframework.stereotype.Service;
@Service
public class BookService {
}
Code language: JavaScript (javascript)
//BookDao.java
package com.office.library.book.user;
import org.springframework.stereotype.Component;
@Component
public class BookDao {
}
Code language: JavaScript (javascript)
하지만 이미 같은 이름의 클래스가 존재하므로 충돌이 발생한다.

2. 빈의 아이디를 다르게 설정
기존의 @Controller를 @Controller("admin.BookController")와 @Controller("user.BookController")로 구분한다.
@Service와 @Component도 위와 같이 구분한다.
3. BeanNameGenerator 사용
빈의 아이디를 다르게 설정하는 것은 매우 귀찮다.
그래서 다른 방법으로 문제를 해결하고자 한다.
스프링에서 제공하는 BeanNameGenerator 인터페이스를 사용한다.

com.office.library.config라는 새로운 패키지를 생성하고 LibraryBeanNameGenerator라는 클래스를 생성하는데 이때 BeanNameGenerator 인터페이스를 구현한다.
//LibraryBeanNameGenerator.java
package com.office.library.config;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
public class LibraryBeanNameGenerator implements BeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return definition.getBeanClassName();
}
}
Code language: JavaScript (javascript)
LibraryBeanNameGenerator.java는 generateBeanName()이라는 메서드가 빈 아이디로 클래스 전체 이름을 반환하도록 하면 된다.
스프링 컨테이너가 LibraryBeanGenerator를 사용하도록 servlet-context.xml을 수정한다.
<!-- before
<context:component-scan base-package="com.office.library" />
-->
<context:component-scan base-package="com.office.library" name-generator= "com.office.library.config.LibraryBeanNameGenerator" />
Code language: HTML, XML (xml)
name-generator= "com.office.library.config.LibraryBeanNameGenerator" 추가.