我正在使用别人编写的 Spring java 代码。我想引用一个由注释(字段 classABC)创建的 bean:
@Component
public class ClassService
{
@Autowired
ClassABC classABC;
public interface ClassABC
@Repository
public class ClassABCImpl extends BaseABC implements ClassABC
以下代码尝试按名称获取对 ClassABC bean 的引用,但不起作用:
ClassABC classABC = ApplicationContext.getBean("classABC");
但是,以下按类型引用此 bean 的代码确实有效:
ClassABC classABC = ApplicationContext.getBean(ClassABC.class);
因为第一个引用不起作用,所以我猜测该 bean 未命名为“classABC”。这种豆子叫什么名字?
注意:没有引用这个bean的配置xml,所以我不认为bean名称是在xml中定义的。
添加到上面 Darren Forsythe 的答案中,AnnotationBeanNameGenerator 的实现可以产生两种 bean 名称。
如果从类名派生的短名称以两个大写字符开头,则短名称将成为 bean 名称。
否则,如果短名称的前两个字符之一是小写,则 Bean 名称将是第一个字符为小写的短名称。
例子:
com.xyz.FooServiceImpl 类名导致 FooServiceImpl 的短名称。由于前两个字符不是大写,bean 名称将变为 -> fooServiceImpl。
但是,如果类名是 com.xyz.FOoServiceImpl,这会导致短名称为 FOoServiceImpl,则您的 bean 名称将保留为 FOoServiceImpl,因为前两个字符是大写的。
同样,com.xyz.FOoServiceIMPL,将导致 bean 名称为 FOoServiceIMPL。
Spring 在创建 bean 名称时仅查看短名称及其前两个字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)