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实现的更多相关文章

  1. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  2. 对Spring中IOC和DI的理解

    前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...

  3. 关于Spring的IOC和DI

    原始调用模型 Spring的演化过程 Spring的调用过程 ======================================= IoC[理解][应用][重点] 1.IoC(Inversi ...

  4. 转载百度百科上的强回复,关于spring的IOC和DI

    IoC与DI   首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...

  5. Java 反射和内省实现spring的IOC和DI

    1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...

  6. 总结一下 Spring的IOC、DI

    国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...

  7. Spring:Ioc和DI

    一.摘要         本文为作者搜集的Spring关于IoC/DI相关知识的记录整理笔记.介绍了IoC(控制反转)是一种设计原则,用于降低代码的耦合度.介绍了IoC是通过BeanDefinitio ...

  8. Spring中IOC与DI的的区别

    依赖注入的前提: 有IOC的环境,也就是将必须对象的创建权交给了Spring. DI 介绍 Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中, ...

  9. spring核心技术IOC,DI

    在介绍Spring中IOC之前,先说说Spring的优势有哪些.首先1.方便解耦,简化开发:就是说将对象间的依赖关系交给Spring进行控制,避免了编码造成的过度耦合.2.AOP编程的支持:方便进行切 ...

随机推荐

  1. IIS站点报拒绝访问Temporary ASP.NET Files的解决办法

    IIS站点本来运行的好好的,突然就出现了:Temporary ASP.NET Files拒绝访问的问题.遇到此类问题,请逐步排查,定可解决. 原因:Windows操作系统升级导致. 办法: 1.检查C ...

  2. Oracle_SQL(2) 分组与聚合函数

    一.聚合函数1.定义:对表或视图的查询时,针对多行记录只返回一个值的函数.2.用途:用于select语句,HAVING条件二.5种聚合函数1.SUM(n) 对列求和 select sum(sal) f ...

  3. git 远程仓库与本地项目关联

    在git 中创建一个项目或仓库如起名blog,生成README.md文件,在本地创建一个项目名为blog  ,blog里面是代码,此时执行 git remote add origin <ssh协 ...

  4. fastdfs 上传图片 完整版

    1.jsp文件 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  5. Linux下查看系统启动 、运行以及安装时间

    1.uptime命令  例子显示已启动13天 当前用户一个 [root@localhost-live version-build-related]# uptime :: up days, :, use ...

  6. ATM作业

    关于ATM作业,最近做了很久,才明白,其实看了很久的作业视频讲解,到不如将作业的整个下载下来进行运行,去了解程序本身的结构和运行方式.首先说需求,就感觉是各种懵逼,这才学了函数,和模块之间的简单调用就 ...

  7. 201621123008 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...

  8. ui设计学习路线图分享送给初学者

    本文来源:千锋UI设计 Ui设计师就业市场前景及薪资很可观,而且现在市场上对于ui设计师的人才需求也很大,所以,现在越来越多的人看好这一行业,纷纷投入到ui设计的学习中来,那么想新手想要学好ui设计, ...

  9. pycharm和anaconda

    借鉴其他博文和亲自操作做一简要的总结: anaconda是python中一个管理包很好用的工具,可以轻松实现python中的各种包的管理.相信大家会有这样的体验,在pycharm中也是有自动搜索和下载 ...

  10. How to reconfigure installed dpkg package (tzdata, locales)

    1 List the installed dpkg package $ sudo dpkg --list 2 Reconfigure the package $ sudo dpkg-reconfigu ...