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. HttpClientUtil工具类封装

    package com.jd.ng.shiro.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; ...

  2. CSS中浮动属性float及清除浮动

    1.float属性 CSS 的 Float(浮动),会使元素向左或向右移动,由于浮动的元素会脱离文档流,所以它后面的元素会重新排列. 浮动元素之后的那些元素将会围绕它,而浮动元素之前的元素将不会受到影 ...

  3. asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...

  4. IDEA搭建spingboot项目

    1.Springboot2.x是依赖于JDK1.8及以上版本的.因此先在电脑上安装JDK1.8,由于公司的项目用的是JDK1.7,所以要在JDK1.7的基础上在安装JDK1.8,让两者同时存在于电脑上 ...

  5. Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型

    本文转载自:https://github.com/jasonGeng88/blog 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 http ...

  6. sql语句insert into where 错误解析

    sql语句中,insert into 代表得是插入一条新得数据,全新得数据,所以你这样得写法是错误得,比如: "insert into klkl_Service_shop(name_real ...

  7. centos7升级kernel之后,vmware无法打开

    12.57版本的vmware: https://my.vmware.com/group/vmware/details?downloadGroup=WKST-1257-LX&productId= ...

  8. ajax跨域处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题

    Controller层的类上增加@CrossOrign注解,当前文件的所有接口就都可以被调用 spring注解@CrossOrigin不起作用的原因 1.是springMVC的版本要在4.2或以上版本 ...

  9. Hadoop HDFS本地存储目录结构解析

    转自:https://blog.csdn.net/superman_xxx/article/details/51689398 HDFS metadata以树状结构存储整个HDFS上的文件和目录,以及相 ...

  10. Git错误总结

    1.error: failed to push some refs to ‘git@github.com:XXXX/XXXX‘ hint: Updates were rejected because ...