关键字:spring通过配置文件读取java类

实现步骤:

1、新建Xml文件,"applicationContext.xml",注意名称, 不能写错.需要是这样的喔

2、配置文件内容如下: 注意:节点名称(bean/beans)和属性名称(id/class)不能自定义

<?xml version="1.0" encoding="UTF-8"?> 


<beans> 

 <bean id="testDao" class="com.dao.TestDaoImpl"></bean> 


 <bean id="testManager" class="com.manager.TestManagerImpl"></bean> 


</beans>




3、利用dom4j读取配置文件信息(如何使用dom4j在<<通过XML文件获取数据库配置信息>>有讲到):

package com.util; 



import java.util.HashMap; 

import java.util.Map; 



import org.dom4j.Document; 

import org.dom4j.DocumentException; 

import org.dom4j.Element; 

import org.dom4j.io.SAXReader; 



public class BeanFactory { 



 private static Map beans=new HashMap(); 

 private static BeanFactory factory=new BeanFactory(); 

 Document doc=null; 

 private BeanFactory(){ 

 try { 


 //加载配置文件信息 

 doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream("applicationContext.xml")); 

 } catch (DocumentException e) { 

 e.printStackTrace(); 

 } 

 } 

 public static BeanFactory getInstance(){ 

 return factory; 

 } 


 public Object getBean(String id){ 

 if(beans.containsKey(id)){ 

 return beans.get(id); 

 } 


 //注意:这里和读取普通配置文件略有不同 


 Element el= (Element) doc.selectObject("//bean[@id=\""+id+"\"]"); 

 Object obj=null; 

 try { 


 //创建类对象 


 obj=Class.forName(el.attributeValue("class")).newInstance(); 


 //加入到Map集合中 


 beans.put(id, obj); 

 } catch (Exception e) { 

 e.printStackTrace(); 

 } 

 return obj; 

 } 


}



4、关键部分,创建类InitConfig.java,继承HttpServlet接口,把读取到的类对象加载到application范围内

package com.util; 



import javax.servlet.ServletException; 

import javax.servlet.http.HttpServlet; 



public class InitConfig extends HttpServlet { 



 //初始化时,就把类的对象加载到方法 


 public void init() throws ServletException { 

 // 

 System.out.println("=======init========="); 

 BeanFactory factory=BeanFactory.getInstance(); 

 //读取到的类对象加载到application范围内 

 this.getServletContext().setAttribute("factory", factory); 

 } 

}


注意:这个Servlet,配置文件中需要加<load-on-startup>节点,<load-on-startup>的用法在<<关于web.xml中的load-on-startup>>中有讲到。






5、使用方法: 在创建Servlet时,需要继承InitConfig,

package com.servlet; 



import java.io.IOException; 

import java.util.List; 

import javax.servlet.ServletException; 

import javax.servlet.http.HttpServlet; 

import javax.servlet.http.HttpServletRequest; 

import javax.servlet.http.HttpServletResponse; 

import com.manager.BookManager; 

import com.util.BeanFactory; 

import com.util.InitConfig; 



public class BookServlet extends InitConfig { 




 public void doGet(HttpServletRequest request, HttpServletResponse response) 

 throws ServletException, IOException { 


 doPost(request,response); 

 } 



 public void doPost(HttpServletRequest request, HttpServletResponse response) 

 throws ServletException, IOException { 



 //获得配置文件中的类 

 TestManager testManager=(TestManager)((BeanFactory)this.getServletContext().getAttribute("factory")).getBean("testManager");//通过配置文件中的id,创建相应类的对象 



 request.getRequestDispatcher("/index.jsp").forward(request, response); 

 } 

}




通过这个对Spring创建对象方式的模拟, 可以更好的理解Spring, 非常方便扩展,再也不用在程序中看到大量的new了! 很好..