Spring:IoC和DI完成打印机

课后作业
使用Spring的IoC、DI 装配一台打印机
纸张接口
实现 有: A4 A5
墨盒接口
实现 有:黑白 彩色
注解方式和非注解方式都要
说明:1.首先是注解方式,下面那些代码就是用注解方式做的,注解方式就是在那个定义属性和方法的那个类上面添加注解:@Component("computer"),这个computer就是填写当前所在的类,然后在每一个属性前面加@Autowired,属性是是私有的,然后用类或接口来做对象,例如private Paper paper;然后当前类要写get/set方法和构造方法(有参无参都要),然后还要在写一个打印出内容的方法,可以自己随便命名,然后方法内要调用对象(paper)点方法名, 由多少个属性,就要写多少个对象点方法名,因为属性的类型是类名。然后方法的实现类,不是接口,如果有接口,接口里面写的是抽象方法,要在具体实现这个方法的类中的类名声明前面添加@Component,如果有多个类实现了这个接口,就只用在一个实现了中写@Component,不然会报错found 2.
2.测试类中ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");为固定写法,applicationContext可以自己起名字。Printer print=(Printer) applicationContext.getBean("printer");这个printer是那个创建属性和方法的类名。print.printCosole(); 调用打印的方法。 测试类基本比较固定,基本不用改什么。
3.applicationContext.xml,如果用注解就要看一下那个最前面那些文件,因为用注解的话是要添加一些东西的,不过都已经封装好了的,直接用就可以,而且封装好的这个xml也可以用于不注解的。注解和不注解的区别:
注解的话就是要:指定存在需要被扫描的类对应包 -> 告诉Spring 容器你可以在哪个包中找到被Spring注解标,也就是写get/set和构造方法的那个类所在的包。这句话放到没有注解里面也没事,不会有什么影响。因为它只是扫描一下包名而已,对于不注解的可有可无,但是注解的一定要有
不注解的话:就是把上面那些@Component,@Autowried全部去掉,一般来说都是先写无注解然后在写有注解的。无注解一共分三种。
  • 目录

生成Referenced Libraries的操作方法

创建config的方法

代码:

package cn.yueqian.pojo;import org.springframework.stereotype.Component;public class A4Paper implements Paper {@Overridepublic String getSize() {// TODO Auto-generated method stubreturn "A4";}}
package cn.yueqian.pojo;import org.springframework.stereotype.Component;@Component
public class A5Paper implements Paper {@Overridepublic String getSize() {// TODO Auto-generated method stubreturn "A5";}}
package cn.yueqian.pojo;import org.springframework.stereotype.Component;public class ColorInk implements Ink{@Overridepublic String getColor() {// TODO Auto-generated method stubreturn "彩色";}   }
package cn.yueqian.pojo;import org.springframework.stereotype.Component;@Component
public class GrayInk implements Ink{@Overridepublic String getColor() {// TODO Auto-generated method stubreturn "黑白";}
}
package cn.yueqian.pojo;import org.springframework.stereotype.Component;public interface Ink {public String getColor();}
package cn.yueqian.pojo;import org.springframework.stereotype.Component;public interface Paper {public String getSize();}
package cn.yueqian.pojo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component("printer")
public class Printer {@Autowiredprivate Paper paper;@Autowiredprivate Ink ink;public Printer() {super();// TODO Auto-generated constructor stub}public Printer(Paper paper, Ink ink) {super();this.paper = paper;this.ink = ink;}public Paper getPaper() {return paper;}public void setPaper(Paper paper) {this.paper = paper;}public Ink getInk() {return ink;}public void setInk(Ink ink) {this.ink = ink;}public void printCosole() {System.out.println("正在使用:"+ink.getColor()+"黑盒和:"+paper.getSize()+"纸张打印内容");}}
package cn.yueqian.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.yueqian.pojo.Computer;
import cn.yueqian.pojo.Person;
import cn.yueqian.pojo.Printer;public class Test {public static void main(String[] args) {//     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//     Person p = (Person)context.getBean("person");
//     p.method();
//
//
//
//    Computer computer =(Computer) context.getBean("computer");
//    computer.run();
//
//    Computer com1 =(Computer) context.getBean("conputer");
//    Computer com2 =(Computer) context.getBean("conputer");ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Printer print=(Printer) applicationContext.getBean("printer");print.printCosole();     }}
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd
"
><!--     <bean id="person" class="cn.yueqian.pojo.Person"><property name="name" value = "李四"></property><property name="speaking" value = "有点饿"></property></bean> --><!--   <bean id="host" class="cn.yueqian.pojo.Host"></bean> -->
<!-- <bean id="display" class="cn.yueqian.pojo.Display"></bean> --><!-- <bean id="computer" class="cn.yueqian.pojo.Computer"> -->
<!-- ref: 引用 容器中其他的bean实例 -->
<!-- DI:依赖注入 -->
<!-- <property name="host" ref="host"></property> -->
<!-- <property name="display" ref="display"></property> --><!-- <bean id="computer" class="cn.yueqian.pojo.Computer" scope = "prototype">  -->
<!-- <constructor-arg index = "0" ref = "host"></constructor-arg> -->
<!-- <constructor-arg index = "1" ref = "display"></constructor-arg> --><!-- <bean id = "computer" class = "cn.yueqian.pojo.Computer" autowire="byName"> --><!-- <bean id = "computer" class = "cn.yueqian.pojo.Computer" autowire="constructor"> -->
<!-- </bean> --><!-- <context:component-scan base-package="cn.yueqian.pojo"></context:component-scan>--><!--下面这个是打印的这个案例,上面是其他的案例的代码,也注释掉了,没关系,然后下面前三个就是无注解的用法,任选一个就可以,不然会冲突,最后一个有注解的--> <!--准备墨盒-->  <!--普通的写法,很麻烦,所以很少用这一种--><!-- <bean id="grayink" class="cn.yueqian.pojo.GrayInk"></bean><bean id="colorink" class="cn.yueqian.pojo.ColorInk"></bean>准备纸张<bean id="a4paper" class="cn.yueqian.pojo.A4Paper"></bean><bean id="a5paper" class="cn.yueqian.pojo.A5Paper"></bean>打印机<bean id="printer" class="cn.yueqian.pojo.Printer"><property name="ink" ref="colorink"/><property name="paper" ref="a4paper"/></bean> -->    <!--构造器写法,这个就要创建对应的构造器,里面的0和1代表第一个和第二个参数,然后class="cn.yueqian.pojo.Printer"后面有一个默认的参数,单实例对象singleton,这样就不会报错,如果设置为多实例的prototype,可能就会报错-->
<!--         <bean id="printer" class="cn.yueqian.pojo.Printer">
<constructor-arg index="0" ref="ink"></constructor-arg>
<constructor-arg index="1" ref="paper"></constructor-arg>
</bean> --><!--自动装配(自动对bean实例做注入)-->
<!-- <bean id="printer" class="cn.yueqian.pojo.Printer" autowire="constructor"> -->
<!-- </bean> --><context:component-scan base-package="cn.yueqian.pojo"></context:component-scan></beans>

Spring:IoC和DI完成打印机打印详细说明过程及代码相关推荐

  1. spring IOC和DI

    spring IOC and DI 1.IOC和DI的区别: IOC:对象的管理权由spring容器掌握(管理权限包括:对象的创建时间点.创建方式以及对象属性的管理): DI:spring操作对象属性 ...

  2. 手写实现Spring(IOC、DI),SpringMVC基础功能

    手写实现Spring(IOC.DI),SpringMVC功能 spring和springMVC的用法相信大家都不陌生,我简单讲下我实现的思路 spring阶段 事项 配置 配置web.xml: ini ...

  3. 浅谈Spring IOC和DI及Spring工厂类

    浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...

  4. Spring IOC与DI、反射的理解 含小案例说明

    阅览了很多篇博文,对于Spring IOC和DI看到很多人介绍的感觉都很含糊,读完之后还是觉得混淆的不行,也有的人认为DI是IOC的另一种说法-emm,可能个人理解不同吧,我的观点并不然.但这种东西, ...

  5. spring IOC和DI 理解

    IOC(控制反转)和DI(依赖注入)是spring中的重要组成部分,下面是个人的一些理解,不代表官方. 1.IOC是什么? IOC:全名是Inversion of Controller 中文解释是控制 ...

  6. Spring IOC和DI

    Spring  IOC和DI 框架:  将一些公用的模块进行集成,通过框架的形式进行管理(事务控制,权限控制(Shiro),日志收集log) Spring框架  SSH: Struts2(配置重型)+ ...

  7. 关于RuoYi中Spring IOC、DI以及MVC不同注解的使用

    1.什么是Spring IOC.DI? IOC(inverse of control)即"控制反转",DI(Dependence Injection)即"依赖注入&quo ...

  8. Spring——IoC和DI

    目录 一.初识Spring 为什么要使用Spring 什么是Spring Spring框架的核心 由哪些模块组成 二.Core Container(核心容器) IoC(控制反转) 什么是 IoC Io ...

  9. Spring IOC和DI之间的关系

    我们通过小故事来理解IOC和DI的关系 现实生活中,比如想吃水饺,在没有水饺店的日子里,最直观的做法就是:买面粉.蔬菜.肉等等食材,再去制造也就是去煮熟.这些都是主动创建的过程.也就是说想吃一顿水饺需 ...

最新文章

  1. 比尔.盖茨11点忠告
  2. Activity从创建到显示的整个过程
  3. Tomcat、Websphere和Jboss类加载机制
  4. LeetCode 709:To Lower Case
  5. [OS复习]虚拟存储管理技术 1
  6. iOS-英雄联盟人物展示
  7. 【Linux网络编程】网络字节序和地址转换
  8. 网络编程: 基于UDP协议的socket
  9. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
  10. pyinstaller打包的文件运行失败:numpy.core.multiarray failed to import
  11. Python库:wordcloud库介绍、政府工作报告词云、自定义背景词云
  12. Spring整合CXF发布及调用WebService
  13. python 文本转excel_如何使用python将txt文件中的数据转换为Excel文件
  14. 数字温度传感器DS18B20的数据手册理解
  15. 进行单元测试时一直报这个错,原因是缺少aspectjweaver包
  16. 魔兽世界个人插件、宏、WA 使用记录
  17. tf.expand_dims函数用法详解(搭配代码理解)
  18. 应用Python爬虫技术获取福彩历史数据
  19. html--P11-P20
  20. JVM总结之垃圾回收

热门文章

  1. 客户端技术:一文带你了解iOS消息推送机制
  2. (20190330)fortran中文件open与close
  3. 软件考试—计算机组成原理—奇偶校验码、海明码、循环冗余校验码
  4. C++学习笔记 (一)指针、结构体
  5. 中国学生校服到了改变的时候——《关于校服》心得
  6. QPlayer2-资源网各大程序背景音乐插件
  7. 【单调队列】恐怖的奴隶主
  8. 计算机毕设(附源码)JAVA-SSM基于web的医院门诊管理系统
  9. #define定义标识符——定义宏——替换规则——##的作用——#undef
  10. mpvue下小程序云开发实现余额提现订阅消息提醒