为了账号安全,请及时绑定邮箱和手机立即绑定

BeanNameAware 的用例

BeanNameAware 的用例

神不在的星期二 2023-07-19 15:52:30
BeanNameAware除了记录 bean 本身的名称之外,我无法弄清楚接口的任何用例。我做了我的研究,但我找不到一个人除了在 bean 初始化后打印 bean 名称之外还写过其他东西。它有任何实际用例吗?
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

            }


        }

    }

}


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信