@Service
public class Animal {
public String name;
}
@Service
public class Dog extends Animal {
public String name;
}
@Service
public class Cat extends Animal {
public String name;
}
在 spring boot 项目中,我想通过使用 spring 框架提供的 ApplicationContext 获取一个特定的 bean,这里是我写的一个简单的例子来说明:
@Component
public class AnimalLocator implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (PayServiceLocator.applicationContext == null) {
PayServiceLocator.applicationContext = applicationContext;
}
}
public <T extends Animal> T getService(String name) {
if("Cat".equals(name) {
applicationContext.getBean(name, Cat.class);
}
if("Dog".equals(name) {
applicationContext.getBean(name, Dog.class);
}
}
}
但是,编译器提示了异常:
马赛克部分应该是狗或猫。我认为它应该有效,因为 T 已经扩展了 Animal 类,但它没有,所以有人对此有任何想法吗?谢谢!
由于您使用 bean 类来访问 bean 实例,因此直接将类作为参数传递:
public <T extends Animal> T getPayService(String name, Class<T> payClass) {
return applicationContext.getBean(name, payClass);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句