猿问

BeanNameAware 的用例

BeanNameAware除了记录 bean 本身的名称之外,我无法弄清楚接口的任何用例。

我做了我的研究,但我找不到一个人除了在 bean 初始化后打印 bean 名称之外还写过其他东西。它有任何实际用例吗?


神不在的星期二
浏览 130回答 1
1回答

牛魔王的故事

BeanNameAware可以在我们有多个类子类化抽象类并且想要知道这些特定 bean 的名称以便使用它们的功能、如果 bean 名称遵循某种模式时执行某些操作、操作它们等的情况下使用。让我们举个例子明白它:abstract class Parent implements BeanNameAware {    String beanName;    void setBeanName(String beanName) {        this.beanName = beanName;    }    abstract void doFilter();}@Componentclass Child1 extends Parent {    @Override    void doFilter() {        // some impl     }}@Componentclass Child2 extends Parent {    @Override    void doFilter() {        // some impl     }}我们有一个服务方法,它获取所有Parent类的实例并调用abstract void doFilter()方法实现:@Serviceclass 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            }        }    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答