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. Case When ELSE END语句

    一.简介.Case  When   ELSE   END共有两种用法: 说实话,这种就是数据库版的switch语句,但是只是形式上很像,实际上还是有差别的!!! Create Table Test6( ...

  2. CentOS下安装官方RPM包的MySQL后找不到my.cnf

    PS:昨天一同事问我说他用MySQL 5.5官方的rpm包安装了,但是在/etc/下面没有my.cnf配置文件.官方rpm包安装的mysql默认确实是没有/etc/my.cnf. 为什么没有这个文件而 ...

  3. xamarin RunOnUiThread

    One of the keys to maintaining a responsive GUI is to do long-running tasks on a background thread s ...

  4. document.referrer的使用和window.opener 跟 window.parent 的区别

    偶尔看到了document.referrer,之前一直有点疑惑与window.opener 和 window.parent之间的区别 首先查了一下w3cSCHOOL, 上面的解释:referrer 属 ...

  5. FZU2168——防守阵地 I——————【找规律或前缀和】

    防守阵地 I Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  6. 一个Java小菜鸟的实习之路

    博主今年大四,六月份毕业,之前一直对编程感兴趣,于是在大学里自学了Java,(本专业是通信工程).在今年过年的时候,父母让来南方过年,于是博主自己也想着能不能在南方找份java的实习先干着,了解一下行 ...

  7. bzoj 4540: [Hnoi2016]序列

    Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- 1,ar.若1≤l≤s≤t≤r≤n,则称 ...

  8. Java ConcurrentModificationException异常原因和解决方法(转)

    摘自:http://www.cnblogs.com/dolphin0520/p/3933551.html#undefined 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同 ...

  9. redis(9)集群搭建

    一.搭建流程 以下我们将构建这样一个redis集群:三个主节点,分别备有一个从节点,主节点之间相互通信,如果主节点挂掉,从节点将被提升为主节点. redis集群至少需要3个redis实例 那么我们需要 ...

  10. JavaMail 邮件发送

    jar包部署 /** * 通过SMTP进行邮件集成 */ public class CmpSendMail { // 邮件发送服务器主机 private final static String HOS ...