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");
View Code

但引入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

原文地址:https://www.cnblogs.com/junhua4254/p/7681601.html