博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
阅读量:6300 次
发布时间:2019-06-22

本文共 3049 字,大约阅读时间需要 10 分钟。

       于java发育。一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子。spring提出了依赖注入的思想,即依赖类不由程序猿实例化,而是通过spring容器帮我们new指定实例而且将实例注入到须要该对象的类中。依赖注入的还有一种说法是“控制反转”,通俗的理解是:寻常我们new一个实例,这个实例的控制权是我们程序猿,而控制反转是指new实例工作不由我们程序猿来做而是交给spring容器来做。

Spring依赖注入(DI)的三种方式,分别为:

1.  Setter方法注入

2.  构造方法注入

3.  接口注入

以下介绍一下这三种依赖注入在Spring中是怎么样实现的。

 Setter方法注入

首先我们须要下面几个类:

接口 Logic.java

接口实现类 LogicImpl.java

一个处理类 LoginAction.java

另一个測试类 TestMain.java

Logic.java例如以下:

package DI;//定义接口public interface Logic {	public String getName();}
LogicImpl.java例如以下:
package DI;public class LogicImpl implements Logic {//实现类	public String getName() {				return "lishehe";	}}

LoginAction.java 会依据使用不同的注入方法而稍有不同

Setter方法注入:

package DI;public class LoginAction {	 private Logic logic;	 	    public void execute() {	       String name = logic.getName();	       System.out.print("My Name Is " + name);  	    }	 	    /**	     * @return the logic	     */	    public Logic getLogic() {	       return logic;	    }	 	    /**	     * @param logic	     *            the logic to set	     */	    public void setLogic(Logic logic) {	       this.logic = logic;	    }}

client測试类

TestMain.java

package DI;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class TestMain {	 /**     * @param args     */    public static void main(String[] args) {        // 得到ApplicationContext对象       ApplicationContext ctx = new FileSystemXmlApplicationContext(              "applicationContext.xml");       // 得到Bean       LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");             loginAction.execute();    }}

定义了一个Logic 类型的变量 logic, LoginAction并没有对logic 进行实例化,而仅仅有他相应的setter/getter方法。由于我们这里使用的是Spring的依赖注入的方式

 

applicationContext.xml配置文件例如以下:

执行效果:

构造器注入

顾名思义。构造方法注入,就是我们依靠LoginAction的构造方法来达到DI的目的。例如以下所看到的:

package DI;public class LoginAction {			 private Logic logic;	 	    public LoginAction(Logic logic) {	       this.logic = logic;	    }	 	    public void execute() {	       String name = logic.getName();	       System.out.print("My Name Is " + name);	    }	}

里我们加入了一个LoginAction的构造方法

applicationContext.xml配置文件例如以下:

	

我们使用constructor-arg来进行配置, index属性是用来表示构造方法中參数的顺序的,假设有多个參数,则依照顺序。从 0,1...来配置

 

我们如今能够执行testMain.java,结果跟使用Setter方法注入全然一样.

 效果图

 

当中须要注意一点有:构造函数有多个參数的话,如:參数1,參数2,而參数2依赖于參数1,这中情况则要注意构造函数的顺序,必须将參数1放在參数2之前。

接口注入

以下继续说说我们不经常使用到的接口注入,还是以LogicAction为例,我们对他进行了改动,例如以下所看到的:

LogicAction.java

package DI;public class LoginAction {		private Logic logic;	     public void execute() {       try {           Object obj = Class.forName("DI.LogicImpl")                  .newInstance();           logic = (Logic) obj;           String name = logic.getName();           System.out.print("My Name Is " + name);       } catch (Exception e) {           e.printStackTrace();       }    }		 }
配置文件:

效果图

总结

    对于Spring的依赖注入。最重要的就是理解他的,一旦理解了,将会认为很的简单。无非就是让容器来给我们实例化那些类。我们要做的就是给容器提供这个接口。这个接口就我们的set方法或由构造。

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
量子卫星是何物?快戳进来涨姿势!
查看>>
AI诊断又有新算法,让人们提前10年知道自己是否会老年痴呆
查看>>
商用无人机被“锁”住了螺旋桨,送货机器人却已经开始满地跑了
查看>>
凯迪生态携手海通安恒,成功启动SAP实施项目
查看>>
Java的对象和类
查看>>
格式化字符串漏洞利用 一、引言
查看>>
Oracle NetSuite推出全球首款智能云套件
查看>>
软件项目进度控制表(自制)
查看>>
企业若不改进其IT运营模式则可能错失未来市场机遇
查看>>
基于epoll封装的事件回调miniserver
查看>>
天猫高管全面解读大快消2018新零售打法
查看>>
idea springboot热部署无效问题
查看>>
第八章 进程间通信
查看>>
HttpSession接口中的方法(Jsp中的session类的用法)
查看>>
「镁客早报」AI可预测心脏病人死亡时间;机器人开始在美国送外卖
查看>>
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
查看>>
物联网全面升级,十年内推动工业进入智能化新阶段
查看>>
spring-通过ListFactory注入List
查看>>
一种基于SDR实现的被动GSM嗅探
查看>>
阿里云ECS每天一件事D1:配置SSH
查看>>