userdaofactory.java

来自「更不用说了,我培训期间的资料,包括每天老师的例子.文件主要包括,HIBERNAT」· Java 代码 · 共 50 行

JAVA
50
字号
package server.dao;
import java.lang.reflect.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class UserDAOFactory {
	private static UserDAOFactory instance=new UserDAOFactory();
	private UserDAOFactory(){}
	public static UserDAOFactory newInstance(){
		return instance;
	}
	public synchronized UserDAO getUserDAO(){
		//读取配置文件
		try {
			SAXParserFactory factory=SAXParserFactory.newInstance();
			SAXParser parser=factory.newSAXParser();
			final String[] names=new String[2];
			parser.parse("config/DAO.xml",new DefaultHandler(){
				String elementName;
				public void startElement(String uri,String localName,String qName,Attributes as){
					this.elementName=qName;
				}
				public void characters(char[] ch,int start,int length){
					String s=new String(ch,start,length).trim();
					if (s.length()==0) return;
					if (this.elementName.equals("DaoImpl")) names[0]=s;
					if (this.elementName.equals("DaoFile")) names[1]=s;
				}
			});
			/*  僵化的硬编码
			if (daoClassName.equals("server.dao.TextFileUserDAO")){
				UserDAO dao=new server.dao.TextFileUserDAO(fileName);
			}
			*/
			
			//反射的根据类名来构造DAO对象
			
			Class c=Class.forName(names[0]);
			Constructor con=c.getConstructor(String.class);
			Object o=con.newInstance(names[1]);
			return (UserDAO)o;
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} 
		
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?