自己重写Spring_XmlBeanFactory_

自己重写Spring_XmlBeanFactory_log4j
2007年11月25日 星期日 03:53
自己重写Spring_XmlBeanFactory_log4j
------------------------------------------------------------------------------------------
log4j.properties
------------------------------------------------------------------------------------------
log4j.logger.netlogger=WARN,file


log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/info0620.html



log4j.appender.file.layout=org.apache.log4j.HTMLLayout

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

<bean >
<property value="log4j.properties" />
<property value="netlogger" />

</bean>

</beans>
------------------------------------------------------------------------------------------
LogIf.java
------------------------------------------------------------------------------------------
public interface LogIf {
public void writeDebug(String info);
public void writeInfo(String info);
public void writeWarn(String info);
public void writeError(String info);
public void writeFatal(String info);
}

------------------------------------------------------------------------------------------
LogImpl.java
------------------------------------------------------------------------------------------
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
* 分别提供五个方法给客户调用,debug,info,warn,error, fatal分别是五个从低到高的级别.用户只管

调用该Log模块
* 所提供的方法,来写日志,而不用取关系LogImpl是怎么去 实现的.
*/
public class LogImpl implements LogIf {
private Properties pro;
private Logger netLogger;
private String propfile;
private String logger_name;
public LogImpl() {}
private void init() {
PropertyConfigurator.configure(propfile); // 初始化配置文件
netLogger = Logger.getLogger(logger_name);// 获取Logger实例
}
public void writeDebug(String info) {
init();
netLogger.debug("Debug: " + info);
}
public void writeInfo(String info) {
init();
netLogger.info("Info: " + info);
}
public void writeWarn(String info) {
init();
netLogger.warn("Warn: " + info);
}
public void writeError(String info) {
init();
netLogger.error("Error: " + info);
}
public void writeFatal(String info) {
init();
netLogger.fatal("Fatal: " + info);
}
public void setLogger_name(String logger_name) {
this.logger_name = logger_name;
}
public void setPropfile(String propfile) {
this.propfile = propfile;
}
}
------------------------------------------------------------------------------------------
SpringStartup.java
------------------------------------------------------------------------------------------
public class SpringStartup {
/**
* @param args
*/
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory("beans.xml");
LogIf log = (LogIf) factory.getBean("log");
log.writeWarn("abc");
}
}
------------------------------------------------------------------------------------------
XmlBeanFactory.java
------------------------------------------------------------------------------------------
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlBeanFactory {
private Properties pro;
private Document document = null;
private static String XMLFILE = null;
private static String key = "key";
public XmlBeanFactory(String XMLFILE) {
this.XMLFILE = XMLFILE;
init();
}
private void init() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(XMLFILE);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 解析XML文件
private HashMap xmlParser(String nodeName, String id_key, String id_value) {
HashMap pro = new HashMap();
try {
NodeList list = document.getElementsByTagName(nodeName);
for (int k = 0; k < list.getLength(); k++) {
Node fatherNode = list.item(k);
NamedNodeMap attributes = fatherNode.getAttributes();
//
boolean flag = false;
for (int i = 0; i < attributes.getLength(); i++) {
Node attribute = attributes.item(i);
if (attribute.getNodeName().equals(id_key)
&& attribute.getNodeValue().equals

(id_value)) {
flag = true;
}
}
if (!flag)
continue;
//
for (int i = 0; i < attributes.getLength(); i++) {
Node attribute = attributes.item(i);
pro.put(attribute.getNodeName(),

attribute.getNodeValue());
}
//
NodeList childNodes = fatherNode.getChildNodes();
HashMap property = new HashMap();
for (int j = 0; j < childNodes.getLength(); j++) {
Node childNode = childNodes.item(j);
if (childNode instanceof Element) {
NamedNodeMap child_attributes = childNode
.getAttributes();
Node child_attribute_name =

child_attributes.item(0);
Node child_attribute_value =

child_attributes.item(1);
property.put

(child_attribute_name.getNodeValue(),


child_attribute_value.getNodeValue());
}
}
pro.put("property", property);
break;
}
return pro;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public Object getBean(String id_value) {
String nodeName = "bean";
HashMap pro = xmlParser(nodeName, "id", id_value);
return ClassLoadFactory.loadClassByConstructor(pro);
}
}
/** 类装载工厂 */
class ClassLoadFactory {
public static Object loadClassByConstructor(HashMap pro) {
try {
Class cl = Class.forName((String) pro.get("class"));
Object obj = cl.newInstance();
Class[] p = { String.class };
//
HashMap property = (HashMap) pro.get("property");
Set mappings = property.entrySet();
Iterator it = mappings.iterator();
while (it.hasNext()) {
Map.Entry me = (Map.Entry) it.next();
String me.getKey();
String value = (String) me.getValue();
String methodName = name.substring(0, 1).toUpperCase()
+ name.substring(1, name.length());
Method method = cl.getMethod("set" + methodName, p);
Object[] values = { value };
method.invoke(obj, values);
}
//
return obj;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}

------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------

本篇日志被作者设置为禁止发表新评论


©2008 Baidu



引文来源 自己重写Spring_XmlBeanFactory_log4j_熊熊之家
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值