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编程的支持:方便进行切 ...
随机推荐
- 关于thymeleaf的if多条件判断
<ul class="nav nav-second-level"> <li th:each="cmenu : ${menu.children}" ...
- laravel框架一次请求的生命周期
第一件事所有的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app ...
- poj 1182 (关系并查集) 食物链
题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...
- VS“当前上下文中不存在名称“ViewBag”,当前上下文不存在名称“model””-已解决
自己的项目出现了错误提示,却能编译成功,但是有点强迫症,总是想解决这个错误. 上网找了一堆,都是删除缓存等一些方法,但是没有多大用处,我觉得还是版本号不对,没有引用进来相应的配置,所以配置下了Conf ...
- iOS通过URL构建UIImage
很多时候我们只能得到一个URL,然后需要构建一个UIImage. 通常情况下,我们一般都是通过SDWebImage来直接构建UIImageVIew的image,如何用URL直接构建UIImage呢? ...
- 部署描述符(web.xml)和标注(annotation)
部署描述符(web.xml) 详细信息可在http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html上下载web- ...
- Python之路番外(第二篇):PYTHON基本数据类型和小知识点
一.基础小知识点 1.如果一行代码过长,可以用续行符 \换行书写 例子 if (signal == "red") and \ (car == "moving") ...
- Aspose.Words给word文档加水印
需求:在一些重要的Word文档需要打印时,添加水印以明出处. 方案:使用Aspose组件给word文档 代码:干货如下 /// <summary> /// Inserts a waterm ...
- 连接db2数据库出现No buffer space available (maximum connections reached?)
Caused by: javax.naming.NamingException: [jcc][t4][2043][11550][3.57.82] 异常 java.net.SocketException ...
- 使用Apache CXF和Spring集成创建Web Service(zz)
使用Apache CXF和Spring集成创建Web Service 您的评价: 还行 收藏该经验 1.创建HelloWorld 接口类 查看源码 打印? 1 package ...