在spring中注入内部类,有可能会遇到如下异常信息:
No default constructor found;
nested exception is java.lang.NoSuchMethodException: xx.xxx.xx.xx外部类$xx内部类.<init>()
看样子是说找不到构造函数,于是我把 无/全 参构造函数 都加上了,可依旧报相同错误。
于是我想,是不是Spring在注入内部类的时候比较特殊?百度一下,果然有坑!
内部类注入方式一:添加内部类构造函数参数
我们遇到上面的错误是因为非静态的内部类默认的构造函数有一个参数,这个参数指向其外部类的实例,所以我们需要给此内部类的bean添加constructor-arg节点,并指向外部类即可,类似配置如下:
<bean class="xx.xx.外部类" id="外部类id">
<property name="hands">
<list>
<bean class="xx.xx.外部类$内部类">
<constructor-arg ref="外部类id"></constructor-arg>
<property name="内部类属性1" value="**"/>
</bean>
</list>
</property>
</bean>
注意: 内部类的类名由外部类的全称+$+内部类的名称
内部类注入方式二:将内部类修改为static
在内部类名class 前加上static即可。
声明:
此文参考并摘抄一部分自:https://www.cnblogs.com/lichmama/p/5670185.html
如有侵犯,请联系作者删除。
网友评论