spring中依赖注入方式总结
文章来源于今日头条用户:分布式系统架构
一、注解注入
注解注入在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中依赖注入方式总结相关推荐
- java中四种注入注解,Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- spring的依赖注入方式
spring的依赖注入两种方式:Setter-based Dependency Injection(set方法去注入) 和 Constructor-based Dependency Injection ...
- Spring DI依赖注入方式
1.构造器注入 2.Set方式注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象中的所有属性,由容器来注入. [环境搭建] Student package co ...
- spring的依赖注入方式详解
第一种:使用setter注入 直接使用bean元素的子元素property进行相关的设置 ①简单类型,直接使用value进行赋值. <bean id="somebean" c ...
- Spring中你不知道的注入方式
前言 在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<prop ...
- Spring的依赖注入方法
文章目录 Spring中依赖注入的方法 基于构造方法的注入 根据索引赋值 根据所属类型传值 根据所属类型传值(不推荐) 基于setter注入 基于接口的注入(不常用,这里不说明了) 拓展方式注入 P命 ...
- Spring学习第4篇:Spring 的依赖注入
大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...
- Spring中IoC两种接口和两种依赖注入方式的比较
spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...
- spring四种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...
最新文章
- linux 卸载 rtx,Ubuntu20.04系统卸载软件及清理系统垃圾缓存以及新力得
- python期末考试题及答案翻译-用 python 解 NOIP 竞赛题
- 关于IIS 7.0 局域网无法访问的解决方法 windows7 iis局域网不能访问
- 机器学习理论入门:第一章 监督学习与非监督学习介绍
- 用计算机进行资料检索工作是,用计算机进行资料检索工作是属于计算机应用中的什么...
- linux下source命令使用详解
- JavaScript权威指南 - 数组
- GAOT工具箱设置交叉概率和变异概率
- css grid 自动高度_CSS Grid构建圣杯布局
- Windows10 创建Django项目
- tp5第三方支付-支付宝
- 印刷电路板(PCB)基础
- 教你轻松删除PDF文件中的空白页
- This computer does not support Intel Virtualization Technology (VT-x) or it is being exclusively use
- Attention-Based View Selection Networks for Light-Field Disparity Estimation论文阅读
- JAVA入门——lesson 7
- Linux设备驱动模型
- bugku 把猪困在猪圈里
- 连续分布——正态分布、卡方分布、t分布、F分布
- Modeling in Blender: Low Poly Car