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>