Spring的多种注入依赖方式:
1.设值注入 2.构造器注入 3属性注入 4方法注入
但是我们常用的 或者是说我常用的 就是 设值注入 和构造器注入
构造器注入:
<bean id="tonyanRepository" class="org.springframework.batch.core.repository.support.SimpleJobRepository">
<constructor-arg ref="tonyanInstanceDao"></constructor-arg>
<constructor-arg ref="tonyanExecutionDao"></constructor-arg>
<constructor-arg ref="tonaynExecutionDao"></constructor-arg>
</bean>
设值注入
<bean id="jobIncrementer" class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
<property name="dataSource" ref="tonyanDataSource" />
<property name="incrementerName" value="TONYAN_TONYAN_JOB_SEQ" />
<property name="columnName" value="ID"></property>
</bean>
那么 他们之间有什么不同和差异呢?
引用
相比之下,设值注入具有如下的优点:
- 与传统的JavaBean的写法更相似,程序开发人员更容易理解、接受。通过setter方法设定依赖关系显得更加直观、自然。
- 对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而使用设值注入,则能避免这些问题。
- 尤其是在某些属性可选的情况下,多参数的构造器更加笨重。
-----------------------------------------------------------
构造注入也不是绝对不如设值注入,在某些特定的场景下,构造注入比设值注入更优秀:
- 构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。例如,组件中其他依赖关系的注入,常常需要依赖于Datasource的注入。采用构造注入,可以在代码中清晰地决定注入顺序。
- 对于依赖关系无须变化的Bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定。因此,无须担心后续的代码对依赖关系产生破坏。
- 依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。
综上所述,一般采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入
分享到:
相关推荐
JavaEE搭建Spring环境,完成设置注入和构造注入
IOC DI 一个spring4.2.0 spring setter 和构造 注入 的小例子
NULL 博文链接:https://moshow.iteye.com/blog/1606825
g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点g构造sql注入点
Spring依赖注入使用构造设注入demo。完整可运行。
C# MVC默认的实例化控制器时是调用不带参数的构造函数,但是使用castle注入进行构造注入构造函数带参。
Spring设值注入和构造注入(通过xml).zip
NULL 博文链接:https://zhangyulong.iteye.com/blog/856986
NULL 博文链接:https://cdxs2.iteye.com/blog/1940307
spring注入方式 set注入 构造注入 自动注入
今天有空,写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了...
本篇文章主要介绍了Spring 两种注入的方式(Set和构造)实例,Spring框架主要提供了Set注入和构造注入两种依赖注入方式。有兴趣的可以了解一下。
Java开发学习(六)----DI依赖注入之setter及构造器注入解析.doc
1. 循环依赖是什么? Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。 Bean A → Bean B → Bean A 更复杂的间接依赖造成的循环...Spring先创建beanC,接着创建bean B(将C注入B中),最后创建bean A(将B注
2.1构造函数注入:先去容器中找到该接口的实现类型。然后遍历该实现类型的构造函数中的参数。首先找有特性标记的。如果没有特性就找构造参数最多的那个构造函数。然后对这个构造函数里的参数进行实例化。如果该...
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会...能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
MVP+Dagger2.5注入构造方法,Dagger2.5是一个依赖注入的框架。 依赖注入是一种面向对象的编程模式,它的出现是为了降低耦合性,所谓耦合就是类之间依赖关系,所谓降低耦合就是降低类和类之间依赖关系。
今天有空,写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了...
本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。...
两种依赖注入的类型分别是setter注入和构造方法注入。详细见代码..