不用set方法怎么注入,不先执行set怎么使用?
还有其他方式, 比如@Inject(与Autowirted相似);@Required(用于set方法);@Resource(属于J2EE).
这些注解都可以将一个对象注入到另一个对象中,具体效果道友可以在使用过程中深入了解
这个好像在视频里有讲解的
贴代码
提示都告诉你了org.interfaces.impl.Man类没有无参的构造器。检查该类,看是否重写了该类的构造器,却没有提供一个无参构造方法。
你应该是没有定义构造器;
为NO时,这个时候就不能实现自动注入了,也就是说当一个bean1中需要另一个bean2时,只能使用在bean1中设值注入(ref属性引用bean2的id)的方式向bean1注入bean2了,不能由程序自动注入bean2,只能由我们手动的配置,我觉得应该是这样子。
我的理解是。
所谓自动装配,指的其实就是对象和变量的组合,或者说就是对变量自动赋值,可以用@Autowired去标记变量方法来实现自动装配,而@Autowired可以用在构造中,set方法中,为什么有这么多的,其实主要还是为了适应更多的应用场景。
而自动装配涉及到两步:
创建对象(使用@Configuration、@Bean等)
对象赋值给指定变量(使用@Autowired、@Inject等)
多看书
使用该bean的时候,必须与该bean的id一样
调用这个ID的位置改了没?
版本都会更新的
其实这里应该将setAutoWiringDao改为setAutoWiringDao1
byName找不到的时候是不会报错的。
这个是根据id定义的类名来决定加载哪一个的吧
你在测试类中没有加入((AutowiringService)context.getBean("autowiringService")).say("word");
你加入就会报错了。
之所以没有报错。因为你这样的写法,只是在AutoWiringService类进行自动装配的时候,没有找到与其属性AutowiringDao 的属性名称autowiringDao相同的对象,所以不调用set方法,也就是autowiringDao这个属性没有装配,并且你在测试时也没有用到这个对象,所以不会报错。
下载第一个文件没有JAR 下载资料4就好了
看的时候,吃东西就不困了。。。
慕课网上有JUnit视频,你可以看看,很简单的
我也不是很明白,没有装配成功,不是null嘛,那测试时应该是空指针异常啊,望解答,谢谢
构造方法就是用constractor自动装配
byname和bytype只是装配类型不同 不能用于构造方法
以下来自百度
byName 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自
动装配。例如,在bean定义中将 autowire设置为by name,而该bean包含master属性(同时提供
setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。
byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的
bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,
则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置
dependency-check="objects"让Spring抛出异常。
没有默认的无参构造方法,这个需要添加AutoService的无参构造方法,不然值为byname或者byType时候AutoService的构造函数会报错吧
搞错了
表示上完大一看这玩意毫无压力
有道理
自动装配,相当于new AutoWritingService对象的时候,根据default-autowire已经将setAutoWiringDAO()调用了
两种注入,一种是构造器,一种是set,只要一种就能实现。
public void setAutoWiringDAO111(AutoWiringDAO autoWiringDAO111) {
System.out.println("setAutoWiringDAO");
this.autoWiringDAO111 = autoWiringDAO111;
}
byType是根据class来寻找对应的bean,如果没有的话就不会执行。
在同一个配置文件中,bean 的id是唯一的,你的id冲突了。