设值注入有如下优点:
设值注入需要该Bean包含这些属性的setter方法
与传统的JavaBean的写法更相似,程序开发人员更容易理解、接收。通过setter方法设定依赖关系显得更加只管。
对于复杂的依赖关系,如果采用构造注入,会导致构造器国语臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化器依赖的全部实例,因而导致性能下降。而使用设值注入,则能避免这些问题
尤其是在某些属性可选的情况况下,多参数的构造器显得更加笨重
构造注入也不是绝对不如设值注入,在某些特定的场景下,构造注入比设值注入更加优秀。
构造注入有以下优势:
构造注入需要该Bean包含带有这些属性的构造器
构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。例如,组件中其他依赖关系的注入,常常要依赖于DataSrouce的注入。采用构造注入,可以在代码中清晰的决定注入顺序。
对于依赖关系无需变化的Bean,构造注入更有用处。因为没有Setter方法,所有的依赖关系全部在构造器内设定。因此,无需担心后续的代码对依赖关系产生破坏。
依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。
建议:采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无需变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入。
已解决
由于配置文件中使用的name是injectionDAO 但构造方法中使用的是injectionDAO1,两遍名称也必须保持一致
都是和视频中一模一样的吧,我下载的源代码文件
多态的一种体现 运行类多态 会在运行的时候进行关系绑定 引用类指向实体类 调用的还是实体类的方法
所以 Father father = new Son(); father是引用对象 son是实际被创建的对象
不是的,形参变量名需要和XML中的
<property name="injectionDao1" <<<----这个要保持一致 ,ref指引用的意思,引用的是 Bean 中的,所以ref="XXX" 要和另一个 <bean id="XXX"....> 对应
构造注入是根据参数名来区分的构造方法的,老师只是在代码中修改了参数名,但是配置文件中没有修改,导致参数名对不上,就没有找到这个构造方法,所以就报错了
不能再pom.xml里面写依赖注入,需要在resources文佳下新增一个spring容器的新的xml,该新增的xml文件具体怎么配置可以自行百度有很多讲解,但是不是早pom.xml里写,pom是Maven项目中的文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等,不是管理spring容器的
不是,比如像web中的servlet和listener注入方式就不需要这样做,而是由web。xml注入到servlet和listener处
资料下载里边有啊
我这边可以复现报错的情况,你看看你的方法体有没有修改
展开类,看到有个绿色的和类名一致的东西,对准右键然后copy ..... name
打开类,双击类名右键,然后copy ..... name
要么接口里的类没有完全实现,要么把接口加上public试试
在pom文件中加入这个依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency>
不能就听理论,多操作几次。回来再看,会更好理解些。
首选xml配置,没有工具的情况下xml修改起来很方便,java文件不好改
那是一个测试类,可以测试方法。不能都去main函数里测试吧,只有一个main函数
截一下错误信息
既然UnitTestBase是老师自己定义的,怎么都不提示一下.哪位大神有这个类的代码,分享一下
是注解掉了,不过效果一样的,我这里按ctrl+shift+/是这样的:
<!-- ****************
*********************
********************* -->
把XMl里面Bean的id 和class之间打上个空格,同样property里的name 和 ref之间也打上一个空格
配置文件第8行,id和ref之间少空格,11行也是id和class之间少
<bean id="injectionDAO"class="com.imooc.ioc.injection.dao.InjectionServiceImpl"></bean>
</beans>你这句包导错了
是什么原因 可以分享下吗
这个xml文件在src/resources/spring-injection.xml中
Impl就在对应的目录里
如果用eclipse的话,可以用Ctrl+H打开全局搜索,直接搜索就知道是在哪个文件里了