欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

后端-框架-Spring-实现动态组装的打印机

程序员文章站 2024-03-02 08:05:58
...

后端-框架-Spring-实现动态组装的打印机

主要告诉自己ref和value的区别

ref为自己设置好的bean,直接引用
value为bean中property中的值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 定义彩色墨盒bean,该bean的id是colorInk,class指定该bean实例的实现类 -->
	<bean id="colorInk" class="cn.ink.ColorInk" />
	<!-- 定义灰色墨盒bean,该bean的id是greyInk,class指定该bean实例的实现类 -->
	<bean id="greyInk" class="cn.ink.GreyInk" />
	<!-- 定义A4纸张bean,该bean的id是a4Paper,class指定该bean实例的实现类 -->
	<bean id="a4Paper" class="cn.ink.TextPaper">
		<!-- property元素用来指定需要容器注入的属性,charPerLine需要容器注入, TextPaper类必须拥有setCharPerLine()方法。 注入每行字符数 -->
		<property name="charPerLine" value="10" />
		<!-- property元素用来指定需要容器注入的属性,linePerPage需要容器注入,TextPaper类必须拥有setLinePerPage()方法。 注入每页行数 -->
		<property name="linePerPage" value="8" />
	</bean>
	<!-- 定义B5纸张bean,该bean的id是b5Paper,class指定该bean实例的实现类 -->
	<bean id="b5Paper" class="cn.ink.TextPaper">
		<!-- property元素用来指定需要容器注入的属性,charPerLine需要容器注入, TextPaper类必须拥有setCharPerLine()方法。注入每行字符数 -->
		<property name="charPerLine" value="6" />
		<!-- property元素用来指定需要容器注入的属性,linePerPage需要容器注入, TextPaper类必须拥有setLinePerPage()方法。注入每页行数 -->
		<property name="linePerPage" value="5" />
	</bean>
	<!-- 组装打印机。定义打印机bean,该bean的id是printer, class指定该bean实例的实现类 -->
	<bean id="printer" class="cn.printer.Printer">
		<!-- 通过ref属性注入已经定义好的bean -->
		<!-- 注入彩色墨盒 -->
		<property name="ink" ref="colorInk"></property>
		<!-- 注入A4打印纸张 -->
		<property name="paper" ref="b5Paper"></property>
	</bean>

</beans>

以下为测试类

package test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.printer.Printer;

/**
 * 测试打印机
 */
public class PrinterTest {

    @Test
	public void printerTest() {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 通过Printer bean的id来获取Printer实例
		Printer printer = (Printer) context.getBean("printer");
		String content = "几位轻量级容器的作者曾骄傲地对我说:这些容器非常有"
				+ "用,因为它们实现了“控制反转”。这样的说辞让我深感迷惑:控"
				+ "制反转是框架所共有的特征,如果仅仅因为使用了控制反转就认为"
				+ "这些轻量级容器与众不同,就好像在说“我的轿车是与众不同的," + "因为它有4个*。”";
		printer.print(content);
	}

}