Spring Framework_学习记录_10

版权声明: https://blog.csdn.net/qq_38386316/article/details/88718074

1.Writing a BeanFactoryPostProcessor

  • DrawingApp.java

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;
 

public class DrawingApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//BeanFactory factory = new  FileSystemXmlApplicationContext("src/spring.xml");
		//Triangle triangle = new Triangle();
		 ApplicationContext context = new ClassPathXmlApplicationContext("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;

public class MyBeanFactory implements  BeanFactoryPostProcessor {

   @Override
   public void postProcessBeanFactory(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;



public class Triangle    {
   private Point pointA;
   private Point pointB;
   private Point pointC;
   public Point getPointA() {
   	return pointA;
   }

   public void setPointA(Point pointA) {
   	this.pointA = pointA;
   }

   public Point getPointB() {
   	return pointB;
   }

   public void setPointB(Point pointB) {
   	this.pointB = pointB;
   }

   public Point getPointC() {
   	return pointC;
   }

   public void setPointC(Point pointC) {
   	this.pointC = pointC;
   }
   public void 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"?>
<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"
    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, 2019 4:06:45 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@e2144e4: startup date [Thu Mar 21 16:06:45 CST 2019]; root of context hierarchy
三月 21, 2019 4:06:45 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring.xml]; nested exception is java.io.FileNotFoundException: class path 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: class path 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

  • 解决办法:
    将properties文件放到src目录下就可以了

3.学习记录

  • 本次学习了如何将properties文件的值给bean中的value。
  • 还有beanfactory的使用流程简介。

猜你喜欢

转载自blog.csdn.net/qq_38386316/article/details/88718074