文章来源于今日头条用户:分布式系统架构

一、注解注入

注解注入在Spring中是用的最多的一种方式,就是在java代码中使用注解的方式进行装配,在代码中加入@Resource或者@Autowired、

1、Autowired是自动注入,自动从spring的上下文找到合适的bean来注入

2、Resource用来指定名称注入

3、Qualifier和Autowired配合使用,指定bean的名称

4、Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。

5、Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。

  • 上面的Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。

举例:在类SpringAction中要依赖对象SpringDao类的对象,那么我们可以按照如下进行注解配置:

public class SpringAction { //注入对象springDao @Autowiredprivate SpringDao springDao; }

在类中光使用注解还不能完全的实现依赖的注入,还需要的spring的配置文件中配置开启注解扫描。

其次,在配置文件中打开<context:annotation-config>节点,告诉Spring容器可以用注解的方式注入依赖对象;其在配置文件中的代码如下

 <!-- bean annotation driven --><context:annotation-config /><context:component-scan base-package="cn.outofmemory.helloannotation" ></context:component-scan>

二、构造器注入

构造器注入指的是在类中构造带参数的构造方法实现类的注入,举例:在类SpringAction中要依赖两个对象SpringDao和User类的对象,那么我们就可以在SpringAction中进行构造器注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:

public class SpringAction { //注入对象springDao private SpringDao springDao; private User user; //构造器public SpringAction(SpringDao springDao,User user){ this.springDao = springDao; this.user = user; System.out.println("构造方法调用springDao和user"); } public void save(){ user.setName("xxxxx"); springDao.save(user); } }

在XML文件就要配置<bean>配置,使用<constructor-arg>标签,ref属性同样指向其它<bean>标签的name属性如下代码所示:

<!--配置bean,配置后该类由spring管理-->
<bean name="springAction" class="com.guage.springdemo.action.SpringAction">
<!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置-->
<constructor-arg ref="springDao"></constructor-arg>
<constructor-arg ref="user"></constructor-arg>
</bean>
<bean name="springDao" class="com.guage.springdemo.dao.impl.SpringDaoImpl"></bean> <bean name="user" class="com.guage.springdemo.vo.User"></bean>

完成以上配置就可以在项目启动后直接使用private SpringDao springDao;

private User user这两个对象了。

但是如果遇到构造方法传入的两参数都是同类型的,为了分清哪个该赋对应值,则需要进行一些小处理:

下面是设置index,就是参数位置:

<bean name="springAction" class="com.guage.springdemo.action.SpringAction">
<constructor-arg index="0" ref="springDao"></constructor-arg>
<constructor-arg index="1" ref="user"></constructor-arg>
</bean>

以上就spring中构造注入的大致用法,具体细节配置还需要大家查询spring官网技术文档。

三、set注入

使用属性的setter方法注入

setter注入指的是在类中加入setter方法实现类的注入,举例:在类SpringAction中要依赖两个对象SpringDao类的对象。首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性。类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口):

public class SpringAction { //注入对象springDao private SpringDao springDao; //一定要写被注入对象的set方法 public void setSpringDao(SpringDao springDao) { this.springDao = springDao; }

在XML文件就要配置<bean>配置

<!--配置bean,配置后该类由spring管理-->
<bean name="springAction" class="com.guage.springdemo.action.SpringAction"> <!--(1)依赖注入,配置当前类中相应的属性--><property name="springDao" ref="springDao"></property> </bean>
<bean name="springDao" class="com.guage.springdemo.dao.impl.SpringDaoImpl">
</bean>

<bean>中的name属性是class属性的一个别名,class属性指类的全名,因为在SpringAction中有一个公共属性Springdao,所以要在<bean>标签中创建一个<property>标签指定SpringDao。<property>标签中的name就是SpringAction类中的SpringDao属性名,ref指下面<bean name="springDao"...>,这样其实是spring将SpringDaoImpl对象实例化并且调用SpringAction的setSpringDao方法将SpringDao注入.

以上就是一个使用属性的setter方法的方式进行依赖注入

四、静态工厂的方法注入

静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取:

package com.guage.springdemo.factory;
import com.guage.springdemo.dao.FactoryDao;
import com.guage.springdemo.dao.impl.FactoryDaoImpl;
import com.guage.springdemo.dao.impl.StaticFacotryDaoImpl;
public class DaoFactory { //静态工厂 public static final FactoryDao getStaticFactoryDaoImpl(){ return new StaticFacotryDaoImpl(); }
}

同样看关键类,这里我需要注入一个FactoryDao对象,这里看起来跟第一种注入一模一样,但是看随后的xml会发现有很大差别:

public class SpringAction { //注入对象 private FactoryDao staticFactoryDao; public void staticFactoryOk(){ staticFactoryDao.saveFactory(); }

//注入对象的set方法

 public void setStaticFactoryDao(FactoryDao staticFactoryDao) { this.staticFactoryDao = staticFactoryDao; }
}

Spring的IOC配置文件,注意看<bean name="staticFactoryDao">指向的class并不是FactoryDao的实现类,而是指向静态工厂DaoFactory,并且配置 factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法:

<!--配置bean,配置后该类由spring管理-->
<bean name="springAction" class="com.guage.springdemo.action.SpringAction" > <!--(3)使用静态工厂的方法注入对象,对应下面的配置文件(3)--><property name="staticFactoryDao" ref="staticFactoryDao"></property> </property> </bean> <!--(3)此处获取对象的方式是从工厂类中获取静态方法-->
<bean name="staticFactoryDao" class="com.guage.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>

五、动态工厂的方式注入

与静态工厂方式注入的方法不同,它需要先创建工厂类再调用方法

public class IOCFactory {
public IOCdependency getFactory(){
return new IOCdependency();
}
}

这里也需要set方法

// 第四种方式,实体工厂方式,在工厂类中返回实体IOCFactory对象

public void setIOCdependency(IOCdependency iocdenpendency) {
this.IOCdependency = iocdenpendency; }

与静态工厂的方法不同,这里需要定义IOCdependency的bean,并指定factory-bean和factory-method

<!-- 第四种方法,实体工厂方法 -->
<bean id="IOCMain" class="com.elish.model.IOCMain">
<!-- 使用实例工厂的方法注入对象,对应下面的配置文件 -->
<property name="IOCdependency" ref="IOCdependency"></property>
</bean>
<!-- 此处获取对象的方式是从工厂类中获取实例方法 -->
<bean name="IOCFactory" class="com.elish.model.IOCFactory"></bean>
<bean name="IOCdependency" factory-bean="IOCFactory"
factory-method="getFactory"></bean>

总结:以上几种对象的注入方式在通常情况下,用第一种、第二种和第三中的情况较多。大部分项目都是用注解方式。所以别的几种注入方式很多人还不是很了解,希望通过以上总结共同提高。

spring中依赖注入方式总结相关推荐

  1. java中四种注入注解,Spring中依赖注入的四种方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...

  2. spring的依赖注入方式

    spring的依赖注入两种方式:Setter-based Dependency Injection(set方法去注入) 和 Constructor-based Dependency Injection ...

  3. Spring DI依赖注入方式

    1.构造器注入 2.Set方式注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象中的所有属性,由容器来注入. [环境搭建] Student package co ...

  4. spring的依赖注入方式详解

    第一种:使用setter注入 直接使用bean元素的子元素property进行相关的设置 ①简单类型,直接使用value进行赋值. <bean id="somebean" c ...

  5. Spring中你不知道的注入方式

    前言 在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<prop ...

  6. Spring的依赖注入方法

    文章目录 Spring中依赖注入的方法 基于构造方法的注入 根据索引赋值 根据所属类型传值 根据所属类型传值(不推荐) 基于setter注入 基于接口的注入(不常用,这里不说明了) 拓展方式注入 P命 ...

  7. Spring学习第4篇:Spring 的依赖注入

    大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...

  8. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

  9. spring四种依赖注入方式

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

最新文章

  1. linux 卸载 rtx,Ubuntu20.04系统卸载软件及清理系统垃圾缓存以及新力得
  2. python期末考试题及答案翻译-用 python 解 NOIP 竞赛题
  3. 关于IIS 7.0 局域网无法访问的解决方法 windows7 iis局域网不能访问
  4. 机器学习理论入门:第一章 监督学习与非监督学习介绍
  5. 用计算机进行资料检索工作是,用计算机进行资料检索工作是属于计算机应用中的什么...
  6. linux下source命令使用详解
  7. JavaScript权威指南 - 数组
  8. GAOT工具箱设置交叉概率和变异概率
  9. css grid 自动高度_CSS Grid构建圣杯布局
  10. Windows10 创建Django项目
  11. tp5第三方支付-支付宝
  12. 印刷电路板(PCB)基础
  13. 教你轻松删除PDF文件中的空白页
  14. This computer does not support Intel Virtualization Technology (VT-x) or it is being exclusively use
  15. Attention-Based View Selection Networks for Light-Field Disparity Estimation论文阅读
  16. JAVA入门——lesson 7
  17. Linux设备驱动模型
  18. bugku 把猪困在猪圈里
  19. 连续分布——正态分布、卡方分布、t分布、F分布
  20. Modeling in Blender: Low Poly Car

热门文章

  1. html td无边框颜色,table的td设置背景颜色后边框框消失
  2. mybatisSql编写小结
  3. C语言的运算符和表达式
  4. windows10下openpose的安装和配置使用教程(C++),以及常见错误分析。
  5. 【畅购商城】用户登录
  6. STM32(C语言)内存分布
  7. 第三代电力电子半导体:SiC MOSFET学习笔记(四)SiC MOSFET传统驱动电路保护
  8. SIGCHLD信号(重点)
  9. 曝 OPPO 给离职员工补发年终奖,此前遭克扣
  10. 基于51单片机的羽毛球计分器设计