[Spring] BeanNameGenerator

2024. 1. 10. 22:09학부 강의/웹프로그래밍 (Spring)

0. 출처

아직 배우고 있는 중이라 부정확한 정보가 포함되어 있을 수 있습니다!
주의하세요!

 

 

올인원 스프링 프레임워크 참고.

 

올인원 스프링 프레임워크 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 


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 {

}
//BookService.java
package com.office.library.book.user;

import org.springframework.stereotype.Service;

@Service
public class BookService {

}
//BookDao.java
package com.office.library.book.user;

import org.springframework.stereotype.Component;

@Component
public class BookDao {

}

하지만 이미 같은 이름의 클래스가 존재하므로 충돌이 발생한다.

 

 


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();
    }

}

LibraryBeanNameGenerator.javagenerateBeanName()이라는 메서드가 빈 아이디로 클래스 전체 이름을 반환하도록 하면 된다.

 

스프링 컨테이너가 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" />

name-generator= "com.office.library.config.LibraryBeanNameGenerator" 추가.

 


 

 

BeanNameGenerator 생성 · ramen4598/Study_JavaSpring_2@b8fe0a6

ramen4598 committed Jan 10, 2024

github.com

 

'학부 강의 > 웹프로그래밍 (Spring)' 카테고리의 다른 글

[Spring] Lombok  (0) 2024.01.04
[Spring] 사용자 관련 기능 구현  (0) 2024.01.04
[Spring] 도서 수정, 삭제  (0) 2024.01.01
[Spring] 도서 등록, 검색  (0) 2023.12.31
[Spring] Mail 보내기  (2) 2023.12.21