【Spring第二篇】IOC:控制反转
IOC:控制反转
什么是IOC?
举个例子,我们有一个UserDao接口类,并且有三个UserDao实现类,分别是MysqlUserDaoImpl、OracleUserDaoImpl、UserDaoImpl,都实现UserDao接口,接下来我们编写service层的UserService接口,并且编写UserService实现类UserServiceImpl,如果根据传统的方法去调用dao层的三个实现类来实现其中的方法
我们需要写三遍以下代码
UserServiceImpl userService = new UserServiceImpl();userService.setUserDao(new MysqlUserDaoImpl());
userService.getUser();userService.setUserDao(new OracleUserDaoImpl());
userService.getUser();userService.setUserDao(new UserDaoImpl());
userService.getUser();
但是现在,我们不用传统的方法去调用,而是在UserService实现类中set dao层中的UserDao接口类
public class UserServiceImpl implements UserService{private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}
}
然后将我们的dao层中三个接口实现类通过bean交给spring容器托管,并且将Service的实现类也交给spring容器接管
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="mysqlImpl" class="com.kk.dao.MysqlUserDaoImpl"/><bean id="oracleImpl" class="com.kk.dao.OracleUserDaoImpl"/><bean id="userDaoImpl" class="com.kk.dao.UserDaoImpl"/><bean id="UserServiceImpl" class="com.kk.service.UserServiceImpl">
<!-- ref 引用Spring容器中创建好的对象value 具体的值,基本数据类型
--><!--在UserServiceImpl创建UserDao,将UserDao引入 因此UserServiceImpl有这么一个UserDao的属性 name="userDao",使用ref引用UserDao的三个实现类--><property name="userDao" ref="mysqlImpl"/>
<!-- <property name="userDao" ref="oracleImpl"/>-->
<!-- <property name="userDao" ref="userDaoImpl"/>--></bean></beans>
这时如果我们想要使用dao层中三个接口实现类中的某一个实现类,我们只需要 <property name="userDao" ref="userDaoImpl"/> 使用这个工具的ref选择我们想要实现的实现类
前提是我们必须在service接口实现类中有set dao的接口
package com.kk.service;
import com.kk.dao.UserDao;
public class UserServiceImpl implements UserService{private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}
}
代码如下:
UserDao
package com.kk.dao;public interface UserDao {public void getUser();}
MysqlUserDaoImpl
package com.kk.dao;public class MysqlUserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("Mysql获取用户数据");}
}
OracleUserDaoImpl
package com.kk.dao;public class OracleUserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("Oracal获取用户数据");}
}
UserDaoImpl
package com.kk.dao;public class UserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("获取用户数据");}
}
UserService
package com.kk.service;public interface UserService {public void getUser();
}
UserServiceImpl
package com.kk.service;import com.kk.dao.UserDao;public class UserServiceImpl implements UserService{private UserDao userDao;//IOC 控制反转public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}
}
beans.xml
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="mysqlImpl" class="com.kk.dao.MysqlUserDaoImpl"/><bean id="oracleImpl" class="com.kk.dao.OracleUserDaoImpl"/><bean id="userDaoImpl" class="com.kk.dao.UserDaoImpl"/><bean id="UserServiceImpl" class="com.kk.service.UserServiceImpl">
<!-- ref 引用Spring容器中创建好的对象value 具体的值,基本数据类型
--><!-- 想要使用哪一个实现类ref就指向哪一个 --> <property name="userDao" ref="mysqlImpl"/></bean></beans>
测试:
public class Test {public static void main(String[] args) {//获取ApplicationContext 拿到Spring的容器ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//拿到容器之后 需要什么就get即可UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");userServiceImpl.getUser();}
}
以上便是IOC的思想,化繁为简,使用传统的去实现这个功能,需要不断的改变测试类的代码,然而使用IOC控制反转,只需改bean.xml中的代码即可
【Spring第二篇】IOC:控制反转相关推荐
- Spring概述及IOC(控制反转) Part I
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Spring概述 1.Spring的模块划分图: 2.Spring主要由(IOC+AOP)构成: ioc的创建方式 ...
- spring学习笔记 -- day02 spring基础、IOC控制反转
一:srping的介绍 1.spring的体系结构 2.spring资源 a.spring-framework-4.2.4.RELEASE:Spring Framework的官方发行包 b.sprin ...
- Spring框架中IoC(控制反转)的原理
一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...
- Spring学习:IOC控制反转
一.Spring概述: Spring是一个开源框架,其存在的根本使命就是简化JAVA开发.为了降低JAVA开发的复杂性,Spring采取了以下四种关键策略: 基于POJO的最轻量级和最小侵入性编程: ...
- Spring第一天 IOC 控制反转JavaBean规范 Bean的作用域 生命周期 依赖注入
Spring:是软件框架,是软件半成品,包含了很多组件. 核心组件:ioc容器 IOC控制反转: 由代码自己控制对象的创建,称为:主动控制(自己new对象,自己炒番茄炒蛋) 有一个组件容器管理对象,应 ...
- Spring中的IoC(控制反转)和DI(依赖注入)
一.Spring IoC的基本概念 控制反转(IoC) 是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) 是IoC的另外一种说法,只是从不同的角度 ...
- Spring核心(ioc控制反转)
IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质.即将控制权由应用程序代码转到了外部容器,控制权的转移就是 ...
- Spring 框架之Ioc控制反转
IoC,Inversion of Control的缩写,中文名称为控制反转,意思是将对象的控制权转移至第三方,例如IoC容器,即可由IoC容器来管理对象的生命周期.依赖关系等. 1.先新建一个Spri ...
- 原创经典-为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?
学到Spring老师一定会讲一句话:IOC能够降低耦合性.可是为什么会降低耦合性,许多老师就讲不清了或者干脆不讲,下面我们通过举一些栗子,一步一步地说明为什么IOC能够降低耦合性. 前言 通过本文你将 ...
- Spring的ioc控制反转
spring介绍 Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿.低效.脱离现实的缺点. Spring致力于J2EE应用的各层(表现层.业务层.持久层)的解决方案, ...
最新文章
- Creative Web Typography Styles | Codrops
- [转]PHP--优化PHP代码建议
- 【自用】nginx.conf
- mysql慢sql增加读写分离_MySQL-Proxy实现MySQL读写分离提高并发负载
- 松果出行CTO朱蓝天做客《智慧Talk》,解开共享电单车产研密码
- Graph Without Long Directed Paths
- java集合概念_JAVA集合概念
- java导出pdf_一张PDF了解JDK11 GC调优秘籍-附PDF下载
- java开发环境怎么写_Java开发基础设置:如何配置Java运行环境
- oracle 多表视图更新
- 最近了解过的一个支付接口
- Linux在终端搜索的两条命令
- 服务器间数据传输的四种方式
- 社交网络分析(igraph)
- 计算机系统从本地硬盘启动设置,技嘉主板电脑在BIOS中设置硬盘启动教程
- 行为设计学-让创意更有黏性
- Office各个windows版本支持大全
- ubuntu alise设置
- 【软考中级】软件设计师学习笔记
- Linux 创建线程 段错误,linux下线程池,出现Segmentation fault (core dumped) 问题