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
}
}
}
}
添加回答
举报