BeanNameAware 테스트

public class BeanLifeCycleTestBean implements BeanNameAware{

    String beanName;

    public void setBeanName(String beanName) {
        this.beanName = beanName;

    public String getBeanName(){
        return beanName;


위와 같이 BeanNameAware 클레스를 구현해 놓고 다음과 같이 간단히 Bean으로 등록합니다.

<bean id=”test” class=”net.agilejava.jedi.spring.beanLifeCycle.BeanLifeCycleTestBean” />

테스트 코드를 다음과 같이 작성하고 돌려보면…

public class BeanLifeCycleTest {

    private ApplicationContext context;

    public void testBeanNameAware() {
        context = new ClassPathXmlApplicationContext(“net/agilejava/jedi/spring/beanLifeCycle/applicationContext.xml”);
        BeanLifeCycleTestBean bean = (BeanLifeCycleTestBean) context.getBean(“test”);
        assertEquals(“test”, bean.getBeanName());


녹색 막대를 확인할 수 있습니다.

이 인터페이스를 구현한 Spring의 소스 코드로는 다음과 같은 것들이 있습니다.
– ServletForwardingController
– AbstractView :: Set the view’s name. Helpful for traceability.
– PortletWrappingController
– GenericFilterBean :: Stores the bean name as defined in the Spring bean factory. Only relevant in case of initialization as bean, to have a name as fallback to the filter name usually provided by a FilterConfig instance.
– JobDetailBean
– OsgiServiceProxyFactoryBean :: To find a bean published as a service by the OsgiServiceExporter, simply set this property. You may specify additional filtering criteria if needed (using the filter property) but this is not required.
– AbstractTest
– EhCacheFactoryBean
– FieldRetrievingFactoryBean :: The bean name of this FieldRetrievingFactoryBean will be interpreted as “staticField” pattern, if neither “targetClass” nor “targetObject” nor “targetField” have been specified. This allows for concise bean definitions with just an id/name.

각각의 소스코드 위에 붙어있던 JavaDoc을 보면 설정 파일에서 사용하는 bean 이름을 알면 유용한 경우가 있는 듯 합니다.
– Bean을 추적하거나 찾을 때 사용
– 특정 Bean 이름으로 필터링 할 때 사용합니다.

Interface to be implemented by beans that want to be aware of their
bean name in a bean factory. Note that it is not usually recommended
that an object depend on its bean name, as this represents a potentially
brittle dependence on external configuration, as well as a possibly
unnecessary dependence on a Spring API.

Spring API에서 인용한 부분을 보면 빈 설정의 빈 이름에 빈이 종속 되도록 하는 것을 권장하지 않습니다. 이유는 빈이 외부의 설정 파일에 종속되게 되며 이것은 Spring API에 종속되는 거나 마찬가지기 때문이라고 합니다.