在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来;另一类则是依赖注入,而Spring主要使用的是依赖注入。一般而言,依赖注入可以分为3种方式。
  •构造器注入。
  •setter注入。
  •接口注入。
  构造器注入和setter注入是主要的方式,而接口注入是从别的地方注入的方式,比如在Web工程中,配置的数据源往往是通过服务器(比如Tomcat)去配置的,这个时候可以用JNDI的形式通过接口将它注入Spring IoC容器中来。下面对它们进行详细讲解。

构造器注入

  构造器注入依赖于构造方法实现,而构造方法可以是有参数的或者是无参数的。在大部分的情况下,我们都是通过类的构造方法来创建类对象,Spring也可以采用反射的方式,通过使用构造方法来完成注入,这就是构造器注入的原理。

public class Role {private Long id;private String roleName;private String note;public Role(String roleName, String note) {this.roleName = roleName;this.note = note;}/******** setter and getter *******/
}

  这个时候是没有办法利用无参数的构造方法去创建对象的,为了使Spring能够正确创建这个对象,可以像代码清单那样去做。

<bean id="role1" class="com.ssm.chapter9.pojo.Role"><constructor-arg index="0" value="总经理"/><constructor-arg index="1" value="公司管理者"/>
</bean>

  constructorarg元素用于定义类构造方法的参数,其中index用于定义参数的位置,而value则是设置值,通过这样的定义Spring便知道使用Role(String,String)这样的构造方法去创建对象了。这样注入还是比较简单的,但是缺点也很明显,由于这里的参数比较少,所以可读性还是不错的,但是如果参数很多,那么这种构造方法就比较复杂了,这个时候应该考虑setter注入。

使用setter注入

  setter注入是Spring中最主流的注入方式,它利用JavaBean规范所定义的setter方法来完成注入,灵活且可读性高。它消除了使用构造器注入时出现多个参数的可能性,首先可以把构造方法声明为无参数的,然后使用setter注入为其设置对应的值,其实也是通过Java反射技术得以现实的。这里假设先在代码清单中为Role类加入一个没有参数的构造方法,然后做代码清单的配置。

<bean id="role2" class="com.ssm.chapter9.pojo.Role"><property name="roleName" value="高级工程师"/><property name="note" value="重要人员"/>
</bean

  这样Spring就会通过反射调用没有参数的构造方法生成对象,同时通过反射对应的setter注入配置的值了。这种方式是Spring最为主要的方式,在实际工作中使用广泛。

接口注入

  有些时候资源并非来自于自身系统,而是来自于外界,比如数据库连接资源完全可以在Tomcat下配置,然后通过JNDI的形式去获取它,这样数据库连接资源是属于开发工程外的资源,这个时候我们可以采用接口注入的形式来获取它

转载于:https://www.cnblogs.com/ooo0/p/10962360.html

spring 依赖注入的3种方式相关推荐

  1. spring依赖注入的4种方式

    Spring 依赖注入的4种方式 一.Set注入 必须要有setter方法 public class UserDao {public void test(){System.out.println(&q ...

  2. spring依赖注入的三种方式以及优缺点

    spring依赖注入的三种方式以及优缺点 一.依赖注入的三种方式 1.通过构造器注入.(spring4.3之后,推荐使用) 2.通过setter注入.(spring4.3之前,推荐使用) 3通过fil ...

  3. Spring依赖注入的几种方式

    使用Spring实现依赖注入 可实现的方式有3种: 属性注入 Setter注入 构造方法注入 属性注入: 在属性声明之前添加@Autowired注解 该类必须是Spring管理对象的 public c ...

  4. Spring依赖注入的两种方式(根据实例详解)

    1,Set注入    2,构造注入 Set方法注入: 原理:通过类的setter方法完成依赖关系的设置 name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法. ...

  5. spring依赖注入的四种方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...

  6. spring依赖注入有几种方式

    Spring支持两种依赖注入方式,分别是属性注入和构造函数注入.除此之外,spring还支持工厂方法注入方式. 属性注入 属性注入指通过setXxx()方法注入Bean的属性值或依赖对象.由于属性注入 ...

  7. Spring依赖注入的三种方式(好的 坏的和丑的)

    关于spring bean三种注入方式的优缺点对比,翻译自Spring DI Patterns: The Good, The Bad, and The Ugly,水平有限,如有错误请指正. Sprin ...

  8. spring 依赖注入的三种方式

    @Autowired:构造器,参数,方法,属性:都是从容器中获取参数组件的值: set方法注入: 构造器注入: 作为Bean方法的参数注入: 例子:Boss 注入Car类 第一种.set方式注入 // ...

  9. Spring系列之依赖注入的三种方式

    目录 一.依赖注入方式 1.使用属性的setXXX方法注入 2.构造函数注入 (1)按类型匹配入参type (2)按索引匹配入参index (3)联合使用类型和索引匹配入参[type和index一起使 ...

最新文章

  1. 只需一行代码,你的纯文本秒变 Markdown
  2. 通过yiic来创建yii应用
  3. 复习HTML+CSS(2)
  4. MyBatis 核心对象
  5. 十条技巧 更聪明地使用Google搜索
  6. 基于Kubernetes的分布式压力测试方案
  7. 成功修复U盘,狂喜中~哈哈哈!!!
  8. 为什么要用maven - 1
  9. getCacheDir()和getFilesDir()方法区别
  10. 计算机aero背景黑,Win7中Aero下面的主题变为黑色
  11. Python面向对象成员修饰符
  12. CSS兼容IE6,IE7和FF的总结
  13. 【双十一特辑】爱心代码(程序员的浪漫)-李峋
  14. Eclipse - Open Declaration
  15. 手机远程访问HTML5,如何使用手机连接远程桌面?
  16. 冲顶大会/芝士超人/花椒直播...答题助手
  17. 有关自己人事档案(学籍)怎么查询攻略
  18. 在有已认证的公众号情况下,复用资质快速注册小程序,免除再次认证费用
  19. Android中设置分割线
  20. 【Web安全】常见的网站安全及解决方案

热门文章

  1. Linux数据写操作改进
  2. 「追根溯源」Ruby数组的uniq方法
  3. SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络
  4. 走近云计算:解密IaaS、PaaS和SaaS
  5. Linux(Ubuntu)设置环境变量(转载)
  6. fopen时w与wb的区别
  7. ObservableCollection 类
  8. fckeditor漏洞之爆路径漏洞
  9. [转]ANT技术研究--与VSS整合自动获取源码进行编译
  10. 基本环境安装: Centos7+Java+Hadoop+Spark+HBase+ES+Azkaban