name 'printer' defined in class path resource [applicationContext.xml]: Error setting property value

版权声明:https://blog.csdn.net/qq_40224714?t=1 https://blog.csdn.net/qq_40224714/article/details/88379481

1、错误提示:

Error setting property values:说找不到Printer中的设置属性值,然后去看一下,配置文件

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'printer' defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'ink' of bean class [myprinter.Printer]: Bean property 'ink' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1685)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1400)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
	at myspring.testHelloSpring.main(testHelloSpring.java:21)
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'ink' of bean class [myprinter.Printer]: Bean property 'ink' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
	at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)
	at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426)
	at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)
	at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266)
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97)
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1681)
	... 9 more

2、配置文件内容:

配置文件中显示,id="printer"下,有两个属性值,分别是:ink与paper。找不到这两个值,说明:Printer类中没有进行设置。然后,找到Printer类:

	<!-- Printer -->
	<bean id="colorInk" class="myprinter.ColorInk"/>
	<bean id="greyInk" class="myprinter.GreyInk"/>
	<bean id="a4Paper" class="myprinter.TextPaper">
		<property name="charPerline" value="10"/>
		<property name="linePerPage" value="8"/>
	</bean>
	<bean id="b5Paper" class="myprinter.TextPaper">
		<property name="charPerLine" value="6"/>
		<property name="LinePerPage" value="5"/>
	</bean>
	<bean id="printer" class="myprinter.Printer">
		<property name="ink" ref="colorInk"/>
		<property name="paper" ref="b5Paper"/>
	</bean>

3、Printer类:

发现有两个变量,没有对其进行setter与getter,这两个方法恰巧是配置文件用来进行获取值得方法,也可以说进行了方法注入。

package myprinter;

public class Printer {
	private Ink ink=null;
	private Paper paper=null;
	public void print(String str) {
		System.out.println("使用"+ink.getColor(255, 200, 0)+"颜色打印:\n");
		for(int i=0;i<str.length();++i) {
			paper.putInChar(str.charAt(i));
		}
		System.out.println(paper.getContent());
	}
	
}

所以,补全方法实现:

package myprinter;

public class Printer {
	private Ink ink=null;
	private Paper paper=null;
	public void print(String str) {
		System.out.println("使用"+ink.getColor(255, 200, 0)+"颜色打印:\n");
		for(int i=0;i<str.length();++i) {
			paper.putInChar(str.charAt(i));
		}
		System.out.println(paper.getContent());
	}
	public Ink getInk() {
		return ink;
	}
	public void setInk(Ink ink) {
		this.ink = ink;
	}
	public Paper getPaper() {
		return paper;
	}
	public void setPaper(Paper paper) {
		this.paper = paper;
	}
	
}

最后,便可以进行实现了。

使用#ffc800颜色打印:

jdkddn
mbfjkd
sbskjd
hsjkhf
djkhlk
==第1页==

hflkhd
fkljhk
alncxj
skhsjf
dskjdh
==第2页==

a.lkfh
jlkahn
jflkan
knfkfk
jkfjkl
==第3页==

dkjsld
jlakcn
jkanck
lcahd;
;;;;;;
==第4页==

;fklnc
mxznmz
,n,.zm
jiklas
djiaon
==第5页==

akljkl
hjlhca
jcnlkn
la;/hj
agshyd
==第6页==

gayuuw
qloetg
sywqiu
wujghb
ljksah
==第7页==

uahis;
hy;aso
du;oui
opwd

==第8页==

猜你喜欢

转载自blog.csdn.net/qq_40224714/article/details/88379481
今日推荐