spring之IOC和DI实现
Spring核心思想 :
IOC控制反转
DI依赖注入
AOP切面编程
IOC思想:
场景描述:
在没有加入spring框架之前我们调取业务层时需要创建对象,例如: 接口名 变量名=new 接口的实现类();
问题描述.
接口和实现类之间会产生依赖关系,如果想切换接口的实现类我们就需要进行修改原代码,不利于管理;
解决上述问题;
我们使用工厂模式,把创建对象的过程放在工厂类当中,只需要修改源代码为接口名 变量名=工厂创建的对象过程;
在一定的程度对代码进行了优化,这样我们表面上把耦合性就降低了,其实并没有,
问题描述:工厂模式没有让我们从实质上去降低耦合度
解决方案:使用xml文件+Factory模式来对代码进行优化,
<bean name="UserService" class="com.fjk.shop.web.servlet.UserServlet"></bean>
接口名 变量名=Factory.getInstrance("UService");
思想:我们把具体的实现类写到xml中,让配置文件进行具体是实现类的管理,
在工厂中使用xpath技术解析xml标签去获取具体实现类的字符串再使用反射技术进行创建对象,这样我们就成功的把程序的耦合性就降低了
这一复杂过程就是IOC思想,控制反转就是解决了程序的耦合性,把创建对象的过程交给spring来管理,spring实现控制反转就是使用了xml+工厂模式+反射技术实现IOC
搭建基础的Spring框架来实现IOC控制反转案例
1.导入jar包

2.创建配置文件
默认路径为src根目录下,命名为applicationContext.xml
3.书写代码
创建UserService接口
public interface UserService {
public abstract void login();
}
创建UserService的实现类UserServiceImp
public class UserServiceImp implements UserService{
@Override
public void login() {
System.out.println("login.....");
}
}
测试方法
@Test
public void test01(){
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//使用控制反转来实现对象的创建
UserService userService = (UserService) applicationContext.getBean("UserService");
userService.login();
}
ApplicationContext接口的实现类有两种: ClassPathXmlApplicationContext,FileSystemXmlApplicationContext;使用实现类来加载配置文件.会立即加载
BeanFactory接口的子接口有一个ApplicationContext,会延迟加载只有在getbean时才会创建bean;开发中不常使用.
AppliCationContext它会在配置文件加载时,就会初始化Bean,并且ApplicationContext
它 提 供 不 同 的 应 用 层 的 Context 实 现 。 例 如 在 web 开 发 中 可 以 使 用
WebApplicationContext.
DI依赖注入:
修改applicationContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING // DTD BEAN 2.0 // EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="张三"></property>
</bean>
</beans>
UserServiceImp文件
public class UserServiceImp implements UserService{
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void login() {
System.out.println("login.....");
System.out.println(name);
}
}
测试输出:
login.....
张三
使用xml文件注入了值
IOC和DI的区别:
IOC是控制反转,创建对象的过程交由spring来管理
DI是依赖注入,在创建对象的过程中,对象所依赖属性通过配置注入对象中.
spring之IOC和DI实现的更多相关文章
- spring的IOC,DI及案例详解
一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...
- 对Spring中IOC和DI的理解
前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...
- 关于Spring的IOC和DI
原始调用模型 Spring的演化过程 Spring的调用过程 ======================================= IoC[理解][应用][重点] 1.IoC(Inversi ...
- 转载百度百科上的强回复,关于spring的IOC和DI
IoC与DI 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...
- Java 反射和内省实现spring的IOC和DI
1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...
- 总结一下 Spring的IOC、DI
国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...
- Spring:Ioc和DI
一.摘要 本文为作者搜集的Spring关于IoC/DI相关知识的记录整理笔记.介绍了IoC(控制反转)是一种设计原则,用于降低代码的耦合度.介绍了IoC是通过BeanDefinitio ...
- Spring中IOC与DI的的区别
依赖注入的前提: 有IOC的环境,也就是将必须对象的创建权交给了Spring. DI 介绍 Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中, ...
- spring核心技术IOC,DI
在介绍Spring中IOC之前,先说说Spring的优势有哪些.首先1.方便解耦,简化开发:就是说将对象间的依赖关系交给Spring进行控制,避免了编码造成的过度耦合.2.AOP编程的支持:方便进行切 ...
随机推荐
- vue2.0后台系统
参考网址: http://www.cnblogs.com/linxin/p/6509897.html
- python 标准输入输出sys.stdout. sys.stdin
import sys, time ## print('please enter your name:')# user_input=sys.stdin.readline()# print(user_in ...
- (转)Android学习路线总结,绝对干货
一.前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知.懂的越多的时候你才会发现懂的越少. 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大. ...
- android开发中一个activity如何调用另一个xml中的控件
有时候,我们需要在一个activity中使用另一个activity中的控件,这时候就不能直接findViewById,不然会报错指向空对象,这时就需要像下面这样做. LayoutInflater fa ...
- 4C - 七夕节
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己 ...
- linux工具介绍
http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/index.html 工具参考篇 1. gdb 调试利器 2. ldd 查看程序依赖库 3 ...
- 如何快速学好Shell脚本?
Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值.但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言的语法却是一件非常困难的事情.甚至有人吐槽,或许没有谁能清楚 ...
- Android.HowToDefineCustomView
Custom View Errors E1 在使用自定义CustomView时,出现以下runtime error: Android.View.InflateException: Binary XML ...
- Yii2 数据操作Query Builder查询数据
Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...
- LibreOJ #6007. 「网络流 24 题」方格取数 最小割 最大点权独立集 最大流
#6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...