1、面向对象写法(带着面向过程的思维)
电脑 computer = new 电脑();
【电脑代码中 new 打印机()】
computer.打印文本("hello 140");

电脑和打印机告诉耦合
--------------------------------------
2、改进,电脑类中,不再new 打印机,采用注入方式
电脑 computer = new 电脑();
打印机 printer = new 打印机();
computer.setPrinter(printer);

把电脑和打印机解耦
但是,仍然存在一个问题:只有1台打印机,不能换
--------------------
3、改进,把打印机设置一个接口,分别添加2个实现类(分别是黑白和 彩色)
电脑 computer = new 电脑();
打印机 printer = new 彩色打印机();
computer.setPrinter(printer);

好处:切换打印机的时候,无须修改电脑类,
电脑和打印机彻底解耦

还有有问题:如果切换打印机,是改代码
(虽然不用改电脑类、也不要改各个打印机的类,
但是还是需要改测试调用类)
-----------------------
4、引入ioc重要思想:把new一个实现类的控制权,
从程序员从交出来,交给spring

在编码过程中,程序员是绝对不知道实现类是谁。
只要你知道,你已经错了。

学会:衣来伸手,饭来张口。
spring给你什么,你就用什么
--------------------------
5、改进spring
(属性的赋值,由代码改为spring注入)

-------------------------

http://www.cnblogs.com/xdp-gacl/p/4249939.html

http://www.cnblogs.com/ITtangtang/p/3978349.html

-----------------------------------

图解

1.新建空项目,配置spring

<!--配置spring-->
<!-- spring-context 已经包含了Core,Bean -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.0.RELEASE</version>
</dependency> <!-- 和struts结合时,需要web,Struts 2 Spring Plugin 2个东西 -->

2.测试类

原本是要写这些代码的

电脑I computer = (电脑I) context.getBean("computer");
打印机I printer = (打印机I)context.getBean("printer"); System.out.println(computer);
System.out.println(printer);
computer.玩游戏();
computer.打印文本("hello 140");

但引入spring后

 //1.先拿到一个spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.拿1台电脑
电脑I computer = (电脑I) context.getBean("computer");
computer.打印文本("hello 140");

3.因为我们有三个class,所以<bean>三个

<bean id="computer" class="com.nf.test.笔记本电脑">
<!-- ref="printer2"只要修改这里就可以使用-->
<property name="printer" ref="printer1"></property> </bean> <bean id="printer1" class="com.nf.test.黑白打印机"></bean>
<bean id="printer2" class="com.nf.test.彩色打印机"></bean>

地址:https://gitee.com/MuNianShi/ioc-spring.git

Struts2学习-Ioc学习-spring的更多相关文章

  1. Struts2学习-Ioc学习

    网址:http://blog.csdn.net/qq_22654611/article/details/52606960可以在这个网址学学. 1.新建空项目,然后建立Java EE,在把Java EE ...

  2. Spring5 概述及Spring IOC学习

    Spring Framework 5 1. Spring框架 1.1 Spring框架概述 1.2 主要内容 Spring框架是一个开源的JavaEE的应用程序 主要核心是 IOC(控制反转)和AOP ...

  3. Spring框架学习(2)IOC学习

    内容源自:IOC理解   spring ioc注入的三种方式  ioc工厂bean深入理解 耦合性,在java中表现为类之间的关系,耦合性强说明类之间的依赖关系强: 侵入性:框架对代码的侵入: 在传统 ...

  4. MyEclipse Spring 学习总结一 Spring IOC容器

    一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...

  5. Spring IOC学习

    IoC基础 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象 ...

  6. 一、Spring的控制反转(IOC)学习

    一.控制反转 1.什么是控制反转? 控制反转(Inversion of Control,缩写为IoC),是面向对象中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(D ...

  7. Spring学习1:Spring基本特性

    http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC ...

  8. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  9. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

随机推荐

  1. SPRING中的线程池ThreadPoolTaskExecutor(转)

    转自:https://blog.csdn.net/zhanglongfei_test/article/details/51888433 一.初始化 1,直接调用 ThreadPoolTaskExecu ...

  2. (转)Cobbler自动化部署最佳实践

    原文:http://www.xuliangwei.com/xubusi/446.html 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统, ...

  3. bootstrap table 以及xEdittable的应用

    以前一直没有用过  bootstrap  表格框架,因为项目css框架用的是bootstrap,为考虑到统一性的原因,所以选用了这个框架 步骤: 第一步:引用 <link href=" ...

  4. java.lang.NumberFormatException: For input string: "1" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang

    java.lang.NumberFormatException: For input string: "1" at java.lang.NumberFormatException ...

  5. 前端渲染模板(一):Thymeleaf

    一.使用 本篇文章将以SpringBoot为框架来介绍Thymeleaf的用法. 1 资源文件的约定目录结构  Maven的资源文件目录:/src/java/resources spring-boot ...

  6. sublime text 3 主题更换

    1.安装colorsublime,里面收藏了大量的主题 2.要选择主题的时候,Ctrl+Shift+P 打开Package Control,输入color,如图 3.Enter,进入选择列表,键盘上下 ...

  7. WES7 定制界面完整过程(去除所有windows标识)

    转载但有改动 红色字体记录 目的:实验从启动开始到出现桌面,不出现任何windows图标或标识.重大提示:在某些虚拟机上面操作和真实机器是不一样的,主机会容易很多;所以在虚拟机无法实现效果的时候使用主 ...

  8. Java - Latch和Barrier的区别

    之所以把Latch与Barrier放在一起比较是因为他们给人一种相似的感觉. 他们都是阻塞一些行为直至某个事件发生,但Latch是等待某个事件发生,而Barrier是等待线程. 先比较一下JCIP中对 ...

  9. 基于语法分析器GOLD Parser开发的数学表达式计算器

    最近发现一款文法分析神器,看完官网(http://goldparser.org/)的介绍后感觉很犀利的样子,于是就拿来测试了一番,写了一个数学表达式分析的小程序,支持的数学运算符如下所示:常规运算:+ ...

  10. Android的消息机制简单总结

    参考文章: http://gityuan.com/2015/12/26/handler-message-framework/#next 参考资料: Android Framework的源码: Mess ...