package org.zcs.spring;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;publicclassDrawingApp{publicstaticvoidmain(String[] args){// TODO Auto-generated method stub//BeanFactory factory = new FileSystemXmlApplicationContext("src/spring.xml");//Triangle triangle = new Triangle();
ApplicationContext context =newClassPathXmlApplicationContext("spring.xml");
Triangle triangle =(Triangle)context.getBean("triangle");
triangle.draw();}}
MyBeanFactory.java
package org.zcs.spring;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanFactoryPostProcessor;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;publicclassMyBeanFactoryimplementsBeanFactoryPostProcessor{@OverridepublicvoidpostProcessBeanFactory(ConfigurableListableBeanFactory arg0)throws BeansException {// TODO Auto-generated method stub
System.out.println("My Bean Factory Post Processor is called");}}
Triangle.java
package org.zcs.spring;publicclassTriangle{private Point pointA;private Point pointB;private Point pointC;public Point getPointA(){return pointA;}publicvoidsetPointA(Point pointA){this.pointA = pointA;}public Point getPointB(){return pointB;}publicvoidsetPointB(Point pointB){this.pointB = pointB;}public Point getPointC(){return pointC;}publicvoidsetPointC(Point pointC){this.pointC = pointC;}publicvoid draw (){
System.out.println("This is PointA: ("+pointA.getX()+","+ pointA.getY()+")");
System.out.println("This is PointB: ("+pointB.getX()+","+ pointB.getY()+")");
System.out.println("This is PointC: ("+pointC.getX()+","+ pointC.getY()+")");}}
spring.xml
<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "triangle" class= "org.zcs.spring.Triangle" autowire= "byName" >
<property name="pointA" ref = "pointA"></property>
<property name="pointB" ref = "pointB"></property>
<property name="pointC" ref = "pointC"></property></bean>
<bean id= "pointA" class = "org.zcs.spring.Point">
<property name="x" value = "${pointA.pointX}"></property>
<property name="y" value = "${pointA.pointY}"></property></bean>
<bean id= "pointB" class = "org.zcs.spring.Point">
<property name="x" value = "20"></property>
<property name="y" value = "0"></property></bean>
<bean id= "pointC" class = "org.zcs.spring.Point">
<property name="x" value = "0"></property>
<property name="y" value = "20"></property></bean>
<bean class = "org.zcs.spring.MyBeanFactory" ></bean>
<bean class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value = "pointsconfig.properties"></property></bean></beans>
pointsconfig.properties
pointA.pointX=1
pointA.pointY=1
2.错误记录
报错信息:
三月 21,20194:06:45 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@e2144e4: startup date [Thu Mar 2116:06:45CST2019]; root of context hierarchy
三月 21,20194:06:45 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions fromclasspath resource [spring.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document fromclasspath resource [spring.xml]; nested exception is java.io.FileNotFoundException:classpath resource [spring.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at org.zcs.spring.DrawingApp.main(DrawingApp.java:16)
Caused by: java.io.FileNotFoundException:classpath resource [spring.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)...13 more