admin管理员组文章数量:1293757
今天在学习springboot的时候报了一个错
网上搜了一圈,主要有两条路,我就是第二条路。。。。
1、多余的@autowired
2、待实例化的类里必须有默认的构造方法(即没有参数的那种)
那么问题来了,为什么会这样呢?
因为IOC利用了java的反射,而spring的反射要求这个bean必须要有一个无参构造器。
but,并不是说反射一定要有无参构造器,但是spring显然是只能由无参构造器创建新对象的。关于反射调用构造器可以看:[使用反射调用构造器]
(https://blog.csdn/ziyonghong/article/details/81428212)
一般来说反射是这样实现的:
Class class = Class.forName(className);
Object object= class.newInstance();
所以需要一个无参的构造器来生成对象(因为没有给初始值)。
当然也可以通过有参构造创建。
spring 4.3之前
@Configuration应该有一个默认的no-args构造函数.
从javadoc开始:
@Configuration classes must have a default/no-arg constructor and may
not use @Autowired constructor parameters.
spring 4.3之后
@Configuration classes support constructor injection.
spring实现起来还蛮简单的,applicationContext.xml配置文件中使用constructor-arg标签来指明实例在初始化时候使用的构造函数并且为构造函数的参数赋值就好了。
但是autowired不用配置文件我还不知道咋搞。。。。。
感兴趣的童鞋可以去研究下实现,我去码我的代码去了。。。。。。。
本文标签: TypeBeandefiningjavaConfiguration
版权声明:本文标题:Consider defining a bean of type ‘java.lang.String‘ in your configuration 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1738336439a2077004.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论