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

2023-11-04

Spring:IoC和DI完成打印机

课后作业
使用SpringIoCDI 装配一台打印机
纸张接口
实现 有: 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 {

	@Override
	public String getSize() {
		// TODO Auto-generated method stub
		return "A4";
	}

}
package cn.yueqian.pojo;

import org.springframework.stereotype.Component;

@Component
public class A5Paper implements Paper {

	@Override
	public String getSize() {
		// TODO Auto-generated method stub
		return "A5";
	}

}
package cn.yueqian.pojo;

import org.springframework.stereotype.Component;


public class ColorInk implements Ink{

	@Override
	public String getColor() {
		// TODO Auto-generated method stub
		return "彩色";
	}	

}
package cn.yueqian.pojo;

import org.springframework.stereotype.Component;

@Component
public class GrayInk implements Ink{

	@Override
	public String getColor() {
		// TODO Auto-generated method stub
		return "黑白";
	}
}

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 {
	@Autowired

	private Paper paper;
	
	@Autowired

	private 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"?>
<beans
	xmlns="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/beans
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/context
	http://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> -->	
            
            
<!--构造器写法,这个就要创建对应的构造器,里面的01代表第一个和第二个参数,然后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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在此代码中,Runnable 未实例化。为什么?

    Runnable cannot instantiate public class Thread4 public static void main String args Thread t1 new Thread new Runnable R
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 为什么 @RunWith(SpringJUnit4ClassRunner.class) 不起作用?

    我正在尝试使用 Spring 框架使用 JUnit 测试 CRUD 方法 下面的代码完美运行 Transactional public class TestJdbcDaoImpl SuppressWarnings deprecation B
  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 如何修复maven错误JAVA_HOME环境变量未正确定义

    当我在虚拟环境中检查maven的版本时 出现以下错误 The JAVA HOME environment variable is not defined correctly This environment variable is need
  • 如何构建和使用 TimeSeriesCollections

    我想在图表的 X 轴上显示一些日期 并且here https stackoverflow com questions 5118684 jfreechart histogram with dates据说我必须使用 TimeSeriesColl
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 用于安装 R 软件包的备用编译器:clang:错误:不支持的选项“-fopenmp”

    我正在尝试在 OS X 10 11 6 上使用 R 版本 3 4 0 安装 rJava 包 install packages rJava type source 我收到以下错误 clang o libjri jnilib Rengine o
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • 如何让JComboBox中的内容居中显示?

    目前我有这个JComboBox 我怎样才能将其中的内容居中 String strs new String 15158133110 15158133124 15158133458 JComboBox com new JComboBox str

随机推荐

  • 【深度学习与计算机视觉】12、迁移学习

    文章目录 一 迁移学习简介 二 为什么要使用迁移学习 三 迁移学习的实现 四 迁移学习系统介绍 一 原始数据有标签 目标数据有标签 1 模型微调 model fine tune 也叫再优化 1 保守训练 Conservative Train
  • Nginx系列(十九):URI转义机制(部分转载)

    一 URI和特殊字符 源文档 https www cnblogs com upyun p 8267334 html 1 URI URI 全称是 Uniform Resource Identifiers 即统一资源标识符 用于在互联网上标识一
  • 【51单片机】LED模块和独立按键的使用

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 原理介绍
  • MIMO 从入门到精通 -科普篇 1 - 5G Massive MIMO

    参考 Our Technology Planet lt lt 5G Massive MIMO Made Simple Learn All About Massive MIMO Beam Forming In 30 minutes gt gt
  • ESP32 Wi-Fi & 蓝牙 Tx Power 调整方法

    此篇博客用来整理 ESP32 Wi Fi BLE 的 Tx Power 调整方法 此博客分为两部分 Wi Fi Tx Power 调整 BLE Tx Power 调整 BR EDR Tx Power 调整 注 当前使用 的 IDF comm
  • Kubeadm 安装 Kubernetes:kubelet 状态失败的解决方案

    Kubeadm 安装 Kubernetes kubelet 状态失败的解决方案 在使用 kubeadm 安装 Kubernetes 集群时 遇到 kubelet 状态失败的问题是比较常见的 这个问题主要出现在 kubelet 无法正常启动或
  • 如何查看微信image/*.dat文件

    背景 起因我是想看看能不能获取的到撤回的图片 于是在 WeChat Files FileStorage Image这个文件下发现了聊天记录储存的文件 却发现文件已被加密 也就有了这篇文章 关于撤回的图片这个问题 结论是获取不到 聊天记录里加
  • Apk脱壳圣战之—如何脱掉“梆梆加固”的保护壳

    一 前言 现如今Android用户的安全意识不是很强 又有一些恶意开发者利用应用的名字吸引眼球 包装一个恶意锁机收费的应用 在用户被骗的安装应用之后 立马手机锁机 需要付费方可解锁 这样的恶意软件是非常让人痛恨的 所以本文就用一个案例来分析
  • HIT-ICS2020大作业

    doc排版转换成md太恶心了 图片三四十张 推荐下载我上传的资源查看 https download csdn net download ggtged 12469782 计算机系统大作业 题 目 程序人生 Hello s P2P 专 业 人工
  • chatpdf+mindshow由论文pdf直接生成报告PPT,拯救研究牲

    chatpdf mindshow由论文pdf直接生成报告PPT 拯救研究牲 感谢AIGC技术 现在可以从论文的pdf直接生成展示的PPT STEP1 STEP2 最终效果预览 步骤 STEP1 论文PDF到PPT的markdown格式 ch
  • 配置Log4j

    来自 http www blogjava net zJun archive 2006 06 28 55511 html Log4J的配置文件 Configuration File 就是用来设置记录器的级别 存放器和布局的 它可接key va
  • DB2 SQL error: SQLCODE: -302, SQLSTATE: 22001, SQLERRMC: null

    DB2 SQL error SQLCODE 302 SQLSTATE 22001 SQLERRMC null 当向数据库中插入记录时遇到以下异常 后经查处是 我将数据库自动生成逐渐的UUID改成了在java代码中手动生成UUID造成的 其实
  • CUDA by example Chapter6 常量内存与事件

    常量内存与事件 常量内存 光线跟踪 在GPU上实现光线追踪 通过常量内存来实现光线追踪 使用事件来测量性能 常量内存 使用常量内存的原因 GPU中含有数量庞大的计算单元 因此性能瓶颈通常并不在于芯片的数学计算吞吐量 而是在于芯片的内存带宽
  • 一款很漂亮的一天只弹窗一次的公告

    一款很漂亮的可设置时间的弹窗公告 可自定义HTML代码的公告 CSS代码 核客互动公告 blog hackeus cn btn large load all popup btn popup btn o page number padding
  • 学习java中的if语句

    java中if语句 if语句 用于判断 可以单分支 也可以多分支 单分支 if 判断语句 满足 则执行的代码块 else 不满足判断语句时 执行的代码块 多分支 if 判断语句1 满足判断语句1 执行的代码块 else if 判断语句2 不
  • pycharm远程调试,python remote debug,不进断点

    不 要 直 接 在 线 上 环 境 远 程 debug 不 要 直 接 在 线 上 环 境 远 程 debug 不 要 直 接 在 线 上 环 境 远 程 debug 目录 1 操作步骤 如下图所示 1 Tools gt Deploymen
  • 总结 Underlay 和 Overlay 网络,在k8s集群实现underlay网络,网络组件flannel vxlan/ calico IPIP模式的网络通信流程,基于二进制实现高可用的K8S集群

    1 总结Underlay和Overlay网络的的区别及优缺点 Overlay网络 Overlay 叫叠加网络也叫覆盖网络 指的是在物理网络的 基础之上叠加实现新的虚拟网络 即可使网络的中的容器可 以相互通信 优点是对物理网络的兼容性比较好
  • 用python实现简单的飞机大战小游戏

    1 下载一个包 PySide2 5 15 2 1 5 15 2 cp35 cp36 cp37 cp38 cp39 cp310 none win amd64 如果下载错误 就先下载shiboken2 5 15 2 1 5 15 2 cp35
  • python——类型转换和冗余数据删除

    1 类型转换 import pandas as pd import datetime 一般我们拿到日期型数据时 基本都是字符串表示的 该如何将其转换为日期型和日期时间型 法1 dt 2019 06 13 16 16 39 d 2017 04
  • Spring:IoC和DI完成打印机打印详细说明过程及代码

    Spring IoC和DI完成打印机 课后作业 使用Spring的IoC DI 装配一台打印机 纸张接口 实现 有 A4 A5 墨盒接口 实现 有 黑白 彩色 注解方式和非注解方式都要 说明 1 首先是注解方式 下面那些代码就是用注解方式做