java 구현 Spring XML에서 java 클래스를 설정하는 방법
<?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"));
//
beanDefMap.put(attrId.getValue(), beanDef);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* element, xPath XML
*
* @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 만들기 클래스: 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();
}
}
이상의 이 자바가 Spring을 실현하여 XML에서 자바 클래스를 설정하는 방법은 바로 편집자가 여러분에게 공유한 모든 내용을 참고할 수 있고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.