Spring-DI控制反转和IOC依赖注入

DI控制反转实例

IDEAJ自动导入Spring框架

创建UserDao.java接口
public interface UserDao {
public void say();
}
创建UserDaoImpl.java继承UserDao.java并重写say()方法
public class UserDaoImpl implements UserDao{
@Override
public void say() {
System.out.println("i am a UserDaoImpl");
}
}
创建SpringBean配置文件ApplicationContext.xml

这个温江,相当于花名册,Spring中的Bean全部需要在这里注册,当遇到实例化某个Bean时,只需要翻开花名册,根据它的name来获取Bean的实例。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "userDao" class="UserDaoImpl"></bean>
</beans>
创建DI的测试类TestDI.java并实例化userDao对象

ApplicationContext类是Spring中的org.springframework.context.BeanFactory的子接口,是Spring中的Bean实例加工厂。

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDI {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
@Test
public void testDI() {
userDao.say();
}
}
测试testDI()方法

通过JUnit4运行testDI()方法,运行结果如下:

总结

控制反转(DI)本质上是一种创建实例化对象的方式,通过控制反转,程序员不需要通过new关键字来创建对象,而是直接通过对象的名字从BeanFactory的子接口ApplicationContext中取出实例化好的对象,BeanFactory本质上是Spring中容器。

依赖注入

创建UserService.java接口
public interface UserService {
public void say();
}
创建UserServiceImpl.java继承UserService.java并重写say()方法
public class UserServiceImpl implements UserService{
@Override
public void say() {
System.out.println("i am a UserServiceImpl !");
}
}
UserServiceImpl.java中声明UserDao对象,并生成setUserDao()方法注入UserDao对象
public class UserServiceImpl implements UserService{

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} @Override
public void say() {
userDao.say();
System.out.println("i am a UserServiceImpl !");
}
}
ApplicationContext.xml文件中配置UserServiceImpl
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "userDao" class="UserDaoImpl"></bean>
<!-- 将id为uerDao的Bean实例注入到userService实例中 -->
<bean id = "userService" class="UserServiceImpl" >
<!-- property标签调用userService实例中的setUserDao方法实现依赖注入 -->
<property name="userDao" ref="userDao"></property>
<!-- name属性表示userService实例中的属性名称,
ref属性表示userService实例中的属性值 -->
</bean>
</beans>
创建IOC的测试类TestIOC.java并实例化userService对象
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIOC { ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
@Test
public void testIOC() {
userService.say();
}
}
测试testIOC()方法

总结

UserServiceImpl.java里实例化UserDao对象作为它的属性,UseServiceImpl.javaUserDaoImpl.java产生依赖关系。通过setUserDao()方法将userDao对象注入就叫做依赖注入。

Spring-DI控制反转和IOC依赖注入的更多相关文章

  1. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  2. Spring核心思想:“控制反转”,也叫“依赖注入” 的理解

    @Service对应的是业务层Bean,例如: @Service("userService") public class UserServiceImpl implements Us ...

  3. 【Java】Spring之控制反转(IoC)(二)

    控制反转(IoC) IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来 ...

  4. spring.net (1) 概念-控制反转(又名依赖注入)

    Spring.net 作为一个应用程序框架,在构建企业级.net应用程序提供了很多灵活而又丰富的功能(如:依赖注入,aop,数据访问抽象,asp.net 扩展). 控制反转: Inversion of ...

  5. Spring学习笔记:Spring概述,第一个IoC依赖注入案例

    一.Spring的优点 企业及系统: 1.大规模:用户数量多.数据规模大.功能众多 2.性能和安全要求高 3.业务复杂 4.灵活应变 Java技术:高入侵式依赖EJB技术框架-->Spring框 ...

  6. 依赖注入 DI 控制反转 IOC 概念 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. Spring.NET 的IOC(依赖注入)

    (1)  ioc,意思是Inversion of control,(反转控制),控制反转,就是交换控制权的意思.现在一般不使用这个词,一般使用dependency injection(依赖注入).依赖 ...

  8. Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

    一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.S ...

  9. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

随机推荐

  1. [洛谷P1095]NOIP2007 普及组T3 守望者的逃离

    问题描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  2. 学习日记10、easyui编辑器combobox绑定数据的两种方式

    1.数据本地绑定 var card = [{ "value": "正常", "text": "正常" }, { &quo ...

  3. sqlserver安装-1

    原文地址: https://blog.csdn.net/qq_41432123/article/details/79053486 下载:(免费使用安装dev版) ed2k://|file|cn_sql ...

  4. scau 1079 三角形(暴力)

    </pre>1079 三角形</h1></center><p align="center" style="margin-top: ...

  5. VS2015发布web服务

    一.IIS中 ①添加网站 二.VS2015 ①右键解决方案→发布: ②自定义,设置配置文件名称: ③ ④发布     三.IIS中浏览(图片的ip地址是自己,上面的ip是截图别人的,所以不一样)

  6. 136、TensorFlow的Embedding lookup

    import tensorflow as tf; import numpy as np; c = np.random.random([10, 1]) b = tf.nn.embedding_looku ...

  7. Git使用gitignore建立项目过滤规则

    在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push ...

  8. Rust OpenGL配置

    下载这个项目 https://github.com/Nercury/rust-and-opengl-lessons 进入 rust-and-opengl-lessons\lesson-04 目录 记得 ...

  9. (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串

    以下内容转载自:传送门 源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wo ...

  10. 水题(三角形与扇形面积计算sin()应用)

    J - Sincerely Gym - 101350J Physics cat likes to draw shapes and figure out their area. He starts by ...