Struts2学习-Ioc学习-spring
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的更多相关文章
- Struts2学习-Ioc学习
网址:http://blog.csdn.net/qq_22654611/article/details/52606960可以在这个网址学学. 1.新建空项目,然后建立Java EE,在把Java EE ...
- Spring5 概述及Spring IOC学习
Spring Framework 5 1. Spring框架 1.1 Spring框架概述 1.2 主要内容 Spring框架是一个开源的JavaEE的应用程序 主要核心是 IOC(控制反转)和AOP ...
- Spring框架学习(2)IOC学习
内容源自:IOC理解 spring ioc注入的三种方式 ioc工厂bean深入理解 耦合性,在java中表现为类之间的关系,耦合性强说明类之间的依赖关系强: 侵入性:框架对代码的侵入: 在传统 ...
- MyEclipse Spring 学习总结一 Spring IOC容器
一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...
- Spring IOC学习
IoC基础 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象 ...
- 一、Spring的控制反转(IOC)学习
一.控制反转 1.什么是控制反转? 控制反转(Inversion of Control,缩写为IoC),是面向对象中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(D ...
- 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 ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- SpringMVC—Struts2拦截器学习网址整理
引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...
随机推荐
- PHP和Java中foreach循环的用法区别
1.foreach语句介绍: ①PHP: foreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息. ...
- Win7与Ubuntu双系统安装过程
Win7安装1.宏基安装Win7插入Win7系统光盘-> 重新启动-> 按F12-> 选择CD安装-> 按任意键-> 选择自定义(高级),接下去根据提示安装. 2.华硕安 ...
- MySql的视图
视图是从一个或多个表中导出的表.是一种虚拟存在的表.视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据.这样,用户可以不用看到整个数据库表中数据,而只关心对自己有用的数据.视图可以使用户的操作更 ...
- C#中要使ListBox使用AddRange()时,能够触发SelectedValueChanged事件
1. 要触发 SelectedValueChanged事件,必须要当ListBox所选中的值发生改变 基本思路是: 当AddRange()后,就马上指定ListBox的SelectedIndex,这样 ...
- Hibernate一对多关系操作
1.创建两个实体类. 一个实体类是商品类,另一个实体类是商品的分类类. 在一对多关系的两个实体中,在编写实体类时必须要遵循以下规则: (1)在一的那一方的实体中,必须要有一个私有的多那一方的实体对象属 ...
- lighttpd 与 gitweb 搭建服务器
搭建 Git 仓库服务器 下载 gitweb 如果是用 debian 系的 Linux 发行版,可以使用 apt 下载安装可执行的 gitweb sudo apt-get install gitweb ...
- java.lang.RuntimeException Unable to instantiate application Caused by: java
参考:http://blog.csdn.net/xufazhong/article/details/71155528 dependencies { classpath 'com.android.too ...
- 在 Azure WebApps 中运行64位 Asp.net Core 应用
作为微软下一代的开源的跨平台的开发框架, Asp.net core 正在吸引越来越多的开发者基于其构建现代 web 应用. 目前, Azure App Service 也实现了对 asp.net co ...
- poj 1700 Crossing River 过河问题。贪心
Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9887 Accepted: 3737 De ...
- 删除SVN版本信息 .svn文件夹
环境:MyEclipse.Windows 问题描述: 在MyEclipse中当我们需要将一个文件夹(包含若干文件或嵌套文件夹)拷贝到另一个文件夹时,此时文件内容虽然拷贝过去了,但其下面的 .svn文件 ...