欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)Spring在XML配置java類的方法

 更新時間:2016年11月28日 10:00:59   投稿:jingxian  
下面小編就為大家?guī)硪黄猨ava實現(xiàn)Spring在XML配置java類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1. 創(chuàng)建自己的bean文件:beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<busi-beans>
	<beans>
		<bean id="SysHelloImpl" type="com.cxm.test.SysHello">
			<desc>test</desc>
			<impl-class>com.cxm.test.SysHelloImpl</impl-class>
		</bean>		
	</beans>		
</busi-beans>

2. 提供解析xml類:XmlUtils

/**
 * 
 */
package com.cxm.xmlutil;

import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

import com.cxm.beaninfo.BeanInfo;



/**
 * @author admin
 * 
 */
public class XmlUtils
{
	
	public static void parseXmlDef(InputStream in, Map<String,BeanInfo> beanDefMap,
			StringBuffer sb) throws Exception
	{
		SAXBuilder reader = new SAXBuilder(false);
		Document doc = null;
		try
		{
			doc = reader.build(in);
			Iterator beanIt = XPath.selectNodes(doc, "/busi-beans/beans/bean")
					.iterator();
			Element e;
			BeanInfo beanDef;
			while (beanIt.hasNext())
			{
				beanDef = new BeanInfo();
				e = (Element) beanIt.next();
				Attribute attrId = e.getAttribute("id");
				Attribute attrType = e.getAttribute("type");
				Attribute singleType = e.getAttribute("single");
				boolean isSingle = true;
				if(null != singleType&&"1".equals(singleType.getValue())){
					isSingle= false;
				}
				beanDef.setSingle(isSingle);
				beanDef.setBeanId(attrId.getValue());
				beanDef.setType(attrType.getValue());
				beanDef.setBeanDesc(getText(e, "desc"));
				beanDef.setImplClassName(getText(e, "impl-class"));
				//處理初始化參數(shù)
				beanDefMap.put(attrId.getValue(), beanDef);
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * 根據(jù)指定的element, xPath獲取XML文檔內(nèi)容
	 * 
	 * @param p_element
	 * @param p_xPath
	 * @return
	 * @throws Exception
	 */
	public static String getText(Element p_element, String p_xPath)
			throws Exception {
		String text = null;
		Element e=(Element)XPath.selectSingleNode(p_element,p_xPath);
		if (e != null) {
			text = e.getText();
		} else {
		}
		return text;
	}
}

3.定義bean IO

/**
 * 
 */
package com.cxm.beaninfo;

/**
 * @author admin
 *
 */
public class BeanInfo
{
	private String beanId;
	
	private String type;
	
	private String beanDesc;
	
	public String getBeanDesc()
	{
		return beanDesc;
	}

	public void setBeanDesc(String beanDesc)
	{
		this.beanDesc = beanDesc;
	}

	public String getType()
	{
		return type;
	}

	public void setType(String type)
	{
		this.type = type;
	}

	private String implClassName;
	
	public String getBeanId()
	{
		return beanId;
	}

	public void setBeanId(String beanId)
	{
		this.beanId = beanId;
	}
	
	public String getImplClassName()
	{
		return implClassName;
	}

	public void setImplClassName(String implClassName)
	{
		this.implClassName = implClassName;
	}

	public boolean isSingle()
	{
		return isSingle;
	}

	public void setSingle(boolean isSingle)
	{
		this.isSingle = isSingle;
	}

	private boolean isSingle = true;
	
}

4.bean的創(chuàng)建類:BeanUtil

/**
 * 
 */
package com.cxm.bean;



/**
 * @author admin
 *
 */
public class BeanUtil
{
	private static XmlBeanFactory factory = new XmlBeanFactory();
	/**
	 * 獲取定義好的Bean對象
	 * @param p_beanId
	 * @return
	 * @throws Exception 
	 */
	public static Object createBean(String p_beanId)
			throws Exception {
		return factory.createBean(p_beanId);
	}
}

 

/**
 * 
 */
package com.cxm.bean;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;

import com.cxm.beaninfo.BeanInfo;
import com.cxm.exception.NoSuchBeanDefinitionException;
import com.cxm.xmlutil.XmlUtils;

/**
 * @author admin
 *
 */
public class XmlBeanFactory
{
	private static String BEAN_XML = "/beans.xml";
	
	private static Map<String,BeanInfo> beanDefMap = new HashMap<String,BeanInfo>();
	
	private static Map<String,Object> instanceMap = new HashMap<String,Object>();
	
	static {
		InputStream in = XmlBeanFactory.class.getResourceAsStream(BEAN_XML);
		if(in ==null){
			try{
				throw new FileNotFoundException();
			}catch (FileNotFoundException e){
				e.printStackTrace();
			}
		}
		StringBuffer sb = new StringBuffer();
		try
		{
			XmlUtils.parseXmlDef(in, beanDefMap, sb);
		}
		catch (Exception e)
		{
			throw new RuntimeException();
		}
	}
	
	public Object createBean(String beanId) throws Exception{
		if(beanId==null || beanId.trim()==""){
			throw new Exception("BeanId can not NULL or '' ");
		}
		BeanInfo beanInfo = beanDefMap.get(beanId);
		if(null ==beanInfo ){
			throw new NoSuchBeanDefinitionException(" beanid is not define in xml");
		}
		Object instance;
		if(beanInfo.isSingle()){
			instance =instanceMap.get(beanId);
			if(null != instance){
				return instance;
			}
		}
		String implClass = beanInfo.getImplClassName();
		Constructor<?> constructor = Class.forName(implClass.trim()).getConstructor();
		instance = constructor.newInstance();
		if(beanInfo.isSingle()){
			instanceMap.put(beanId, instance);
		}
		return instance;
	}
}

5. 測試:

/**
 * 
 */
package com.cxm.test;

/**
 * @author admin
 *
 */
public interface SysHello
{
	void sysHello();
}

 

/**
 * 
 */
package com.cxm.test;

/**
 * @author admin
 *
 */
public class SysHelloImpl implements SysHello
{

	@Override
	public void sysHello()
	{
		System.out.println("hello world!");
		
	}
	
}

 

/**
 * 
 */
package com.cxm.test;

import com.cxm.bean.BeanUtil;

/**
 * @author admin
 *
 */
public class Test
{
	
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception
	{
		SysHello s = (SysHello)BeanUtil.createBean("SysHelloImpl");
		s.sysHello();
	}
	
}

以上這篇java實現(xiàn)Spring在XML配置java類的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談java中的TreeMap 排序與TreeSet 排序

    淺談java中的TreeMap 排序與TreeSet 排序

    下面小編就為大家?guī)硪黄獪\談java中的TreeMap 排序與TreeSet 排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解

    Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解

    這篇文章主要介紹了Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring SpringMVC,Spring整合MyBatis 事務(wù)配置的詳細流程

    Spring SpringMVC,Spring整合MyBatis 事務(wù)配置的詳細流程

    這篇文章給大家介紹SSM整合詳細流程步驟 Spring SpringMVC,Spring整合MyBatis 事務(wù)配置,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • Idea自動生成Entity實現(xiàn)過程詳解

    Idea自動生成Entity實現(xiàn)過程詳解

    這篇文章主要介紹了Idea自動生成Entity實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細可調(diào)整Git commit template 支持

    IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細可調(diào)整Git commit template 支持

    這篇文章主要介紹了IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細可調(diào)整,Git commit template 支持,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 一個處理用戶登陸的servlet簡單實例

    一個處理用戶登陸的servlet簡單實例

    這篇文章主要介紹了一個處理用戶登陸的servlet簡單實例,可通過servlet實現(xiàn)處理用戶登錄的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • MyBatis update標(biāo)簽詳解

    MyBatis update標(biāo)簽詳解

    這篇文章主要介紹了MyBatis update標(biāo)簽,使用 Map 傳遞參數(shù)會導(dǎo)致業(yè)務(wù)可讀性的喪失,繼而導(dǎo)致后續(xù)擴展和維護的困難,所以在實際應(yīng)用中我們應(yīng)該果斷廢棄該方式,需要的朋友可以參考下
    2023-10-10
  • Java使用JCommander實現(xiàn)解析命令行參數(shù)

    Java使用JCommander實現(xiàn)解析命令行參數(shù)

    jcommander?是一個只有幾十?kb?的?Java?命令行參數(shù)解析工具,可以通過注解的方式快速實現(xiàn)命令行參數(shù)解析,本文就來和大家介紹一下JCommander是如何解析命令行參數(shù)吧
    2023-06-06
  • Java深入講解AWT實現(xiàn)事件處理流程

    Java深入講解AWT實現(xiàn)事件處理流程

    AWT的事件處理是一種委派式事件處理方式:普通組件(事件源)將整個事件處理委托給特定的對象(事件監(jiān)聽器);當(dāng)該事件源發(fā)生指定的事件時,就通知所委托的事件監(jiān)聽器,由事件監(jiān)聽器來處理這個事件
    2022-04-04
  • Java 反射機制實例詳解

    Java 反射機制實例詳解

    這篇文章主要介紹了Java 反射機制實例詳解的相關(guān)資料,這里對java中反射機制進行了詳細的分析,需要的朋友可以參考下
    2017-09-09

最新評論