SSH学习九 依赖注入

依赖注入(DI)和控制反转(IoC),意思是一样的

传统方式中,如果JAVA实例A需要另一个实例B,那么需要new B(),然后给A用,也就是有调用者A创建被调用者B的实例

依赖注入模式下:创建被调用者B的工作不再由A完成,而是由Spring容器完成(或者说工厂模式的工厂完成),然后注入调用者,因此也成为依赖注入,因为A和B是依赖关系。

依赖注入有两种方式:

(1)设值注入

Spring通过Set方法为类A的成员注入值。

(2)构造注入

通过构造器注入。

例子如下:

代码逻辑:

Service通过构造器注入dog和cat,也就是构造注入,而dog和cat的属性-年龄是通过set方法注入,也就是设值注入,实现的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

	<!--
	<bean id="dog" class="com.ehr.service.Service"></bean>
	Dog dog =new Dog();
	 -->
	 <bean id = "dog" class="com.learn.DAO.impl.Dog">
	 	<property name="dage" value="12"></property>
	 </bean>
	 <bean id="cat" class="com.learn.DAO.impl.Cat">
	 	<property name="cage" value="21"></property>
	 </bean>
	 <bean id = "service" class="com.ehr.service.Service">
	 	<constructor-arg ref="dog"></constructor-arg>
	 	<constructor-arg ref="cat"></constructor-arg>
	 </bean>
</beans>

Service:

</pre>package com.ehr.service;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.DAO.ICat;import com.learn.DAO.IDog;import com.learn.DAO.impl.Cat;import com.learn.DAO.impl.Dog;public class Service {<span style="white-space:pre">	</span>IDog dog;<span style="white-space:pre">	</span>ICat cat;<span style="white-space:pre">	</span><span style="white-space:pre">	</span>public Service(IDog dog, ICat cat){<span style="white-space:pre">		</span>this.dog = dog;<span style="white-space:pre">		</span>this.cat = cat;<span style="white-space:pre">	</span>}<span style="white-space:pre">	</span><span style="white-space:pre">	</span>public static void main(String[] args) {<span style="white-space:pre">		</span>ApplicationContext context = new ClassPathXmlApplicationContext(<span style="white-space:pre">		</span>        "applicationContext.xml");<span style="white-space:pre">		</span>Service s1 = (Service) context.getBean("service");<span style="white-space:pre">		</span>s1.dog.bark();<span style="white-space:pre">		</span>s1.cat.bark();<span style="white-space:pre">	</span>}}</p><p>Dog</p><p><pre name="code" class="java">package com.learn.DAO.impl;

public class Dog implements com.learn.DAO.IDog {
	int dage;

	public void setDage(int dage) {
		this.dage = dage;
	}
	public void bark() {
		System.out.println("Dog.bark()" + " WangWang " + dage) ;
	}

}

IDog

package com.learn.DAO;

public interface IDog {
	public void bark();
}

Cat

package com.learn.DAO.impl;

import com.learn.DAO.ICat;

public class Cat implements ICat {
	int cage;

	public void setCage(int cage) {
		this.cage = cage;
	}
	@Override
	public void bark() {
		System.out.println("Cat.bark()"  + cage);
	}

}

ICat

package com.learn.DAO;

public interface ICat {
	public void bark();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-23 01:41:52

SSH学习九 依赖注入的相关文章

从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

代码已上传Github,文末有地址 说接上文,上回说到了<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探>,后来的标题中,我把仓储两个字给去掉了,因为好像大家对这个模式很有不同的看法,嗯~可能还是我学艺不精,没有说到其中的好处,现在在学DDD领域驱动设计相关资料,有了好的灵感再给大家分享吧. 到目前为止我们的项目已经有了基本的雏形,后端其实已经可以搭建自己的接口列表了,框架已

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

Spring学习——DI(依赖注入)

IOC容器,处理对象依赖关系 IOC与DI: IOC :是一个容器,创建对象的容器 DI :在容器创建对象后,处理对象的依赖关系,也叫依赖注入! 方式1:通过set方法注入值 可以给普通属性.集合属性注入值: 1. 必须提供set方法 2. 配置中通过bean的property子节点,给对象属性注入值: 1 <!-- 2 依赖注入,即处理对象的依赖关系!给对象的属性设置值! 3 --> 4 <!-- 1) 给对象属性赋值(通过构造函数)--> 5 <bean id="

AngulerJS学习(二) 依赖注入

简介: 首先我们需要理解什么是依赖注入? 控制反转和依赖注入有什么区别? 假定:应用程序A,需要访问外部资源C.这里使用了容器B(是指用来实现 IOC/DI 功能的一个框架程序). A需要访问C B获取C然后返回给A IOC inversion of control 控制反转:站在容器角度.B控制A,由B反向的向A注入C.即容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源. DI Dependency Injection 依赖注入:站在应用程序的角度.A依赖B获取C,B将C注

AngularJS学习之依赖注入

1.什么是依赖注入:简称DI,是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分. 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦合,并遵循了依赖反转和单一的职责原则,与服务定位器模式形成直接对比的是,它允许客户端了解如何使用系统找到依赖: 2.一句话:没事你不要来找我,有事我会去找你: 3.AngularJS提供了很好地依赖注入,以下5个核心组件用来作为依赖注入: **Value:一

spring学习笔记-依赖注入

学习过程访问的地址,按顺序理解: [email protected]注解与自动装配 spring四种依赖注入方式 Spring注解注入 <context:component-scan>使用说明 详细:Spring零配置通过注解实现Bean依赖注入总结

angularjs学习:依赖注入

1. AngularJS使用 $injetor(注入器服务)来管理依赖关系的查询和实例化.事实上, $injetor负责实例化AngularJS中所有的组件,包括应用的模块.指令和控制器等.在运行时, 任何模块启动时$injetor都会负责实例化,并将其需要的所有依赖传递进去. 以在需要的地方通过参数进行传递的方式来进行依赖注入的. 在内部, AngularJS的处理过程是下面这样的: // 使用注入器加载应用 var injector = angular.injector(['ng', 'my

Spring学习(一)---依赖注入和控制反转

Spring Spring是一个从实际开发中抽出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring为企业应用的开发提供了一个轻量级的解决方案.该解决方案包括:基于依赖注入的核心机制.基于AOP的声明事务管理.与多种持久层技术的整合,以及优秀的Web MVC框架等. 使用Spring管理Bean Spring核心容器就是一个超级大工厂,所有的对象(包括数据源.Hibernate SessionFactory等基础性资

spring学习 五 依赖注入的方式

依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<bean>标签下使用<property>标签,就是setter注入 2.1: 如果属性是基本数据类型或 String 等简单类型 <bean id="peo" class="com.bjsxt.pojo.People"> <proper