簡體   English   中英

BeanNameAware的用例

[英]Use case of BeanNameAware

除了記錄Bean本身的名稱之外,我無法確定BeanNameAware接口的任何用例。

我做了研究,但找不到一個人,除了在初始化Bean之后打印Bean名稱之外,他還寫過其他東西。 有實際用例嗎?

BeanNameAware可以在我們有多個抽象類的子類的情況下使用,並且想知道那些特定bean的名稱以使用其功能,如果bean名稱遵循某種模式,則要進行某些操作,對其進行操作,等等。並了解它:

abstract class Parent implements BeanNameAware {

    String beanName;

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

    abstract void doFilter();

}

@Component
class Child1 extends Parent {
    @Override
    void doFilter() {
        // some impl 
    }
}

@Component
class Child2 extends Parent {
    @Override
    void doFilter() {
        // some impl 
    }
}

我們有一個服務方法,該方法接受所有Parent類的實例並調用abstract void doFilter()方法實現:

@Service
class SomeService{

    @Autowired
    Parent[] childs; // injecting all Child*

    void doSomethingWithChilds() {
        for(Parent child: childs) {
            child.doFilter(); // invoking their doFilter() impl
            String currentChildName = child.beanName;
            // We now know the name of current child* bean
            // We can use it for manipulating the child* instance
            // This is useful because each child instance will have a different bean name

            if(currentChildName.equals("child2")) {
                // do something special with child2
            }

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM