1 回答

TA貢獻1830條經(jīng)驗 獲得超3個贊
BeanNameAware可以在我們有多個類子類化抽象類并且想要知道這些特定 bean 的名稱以便使用它們的功能、如果 bean 名稱遵循某種模式時執(zhí)行某些操作、操作它們等的情況下使用。讓我們舉個例子明白它:
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類的實例并調(diào)用abstract void doFilter()方法實現(xiàn):
@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
}
}
}
}
添加回答
舉報