小例子 使用反射机制创建dao的factory

public class Factory {
 private static Properties props =

  new Properties();
 static{
  InputStream
ips =

   Factory.class.getClassLoader()
   .getResourceAsStream(
     "util/dao.properties");
  try
{
   props.load(ips);
  } catch (IOException e)
{
   e.printStackTrace();
  }
 }
 public
static Object getInstance(String type){
  Object obj =
null;
  //依据接口名称(type)找到类名
  String className =
props.getProperty(type);
    try
{
   Class c =
Class.forName(className);
   //依据方法区中的class对象,创建
   //一个实例。
   obj
= c.newInstance();
  } catch (Exception e)
{
   e.printStackTrace();
  }
  return
obj;
 }
}

在web中调用到就可以比较方便,例如:

public class ActionServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse
response)
   throws ServletException, IOException
{
  request.setCharacterEncoding("utf-8");
  String
uri = request.getRequestURI();
  String action =
uri.substring(uri.lastIndexOf("/"),
    uri.lastIndexOf("."));
  if(action.equals("/login")){
   String
username =
request.getParameter(
     "username");
   String
pwd = request.getParameter("pwd");
   UserDAO dao
=
    (UserDAO)Factory.getInstance("UserDAO");
   try
{
    User user =
dao.findByUsername(
      username);
    if(user
!= null &&
user.getPwd().equals(pwd)){
     //登录成功,跳转到主功能页面
     HttpSession
session =

      request.getSession();
     session.setAttribute("user",
user);
     response.sendRedirect("main.jsp");
    }else{
     //登录失败,提示用户输入正确的用户名和密码
     request.setAttribute("login_error",

       "用户名或密码错误");
     request.getRequestDispatcher("login.jsp")
     .forward(request,
response);
    }
   } catch (Exception
e)
{
    e.printStackTrace();
    throw
new
ServletException(e);
   }
  }
 
 }

}

时间: 2024-08-02 20:22:19

小例子 使用反射机制创建dao的factory的相关文章

使用反射机制创建sqlite数据库

安卓中通过反射动态建库 利用java的反射机制,我们可以得到对象里的方法列表,参数列表以及对应的值. 1.模型层 数据库层dao 业务层business 数据库基类base 2.实现步骤 (1)写一个数据库辅助类 1)定义接口使反射能够调用,执行读写操作 2)使用单例模式 先建私有的构造方法,再判断 (2)创建实体类.其中的属性即数据表中的字段 在dao层建表.更新.写增删改查方法 (3) 在基类base ,config类中声明 数据库名. 数据库名 定义私有的构造方法用于外界直接使用new来实

Java反射机制(创建Class对象的三种方式)

1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Modifier 2:什么是反射 JAVA反射机制是在运行状态中,对于任意一个类.都能都知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称

利用反射机制创建类的对象

第一步:创建要反射的类的字节码文件对象,其实就是创建了Class类的对象(一共有三种方法) 方式一:通过对对象获取字节码文件对象 例如:Person p = new Person(); Class c1 = p.getclass(); //Object类中的方法:public final Class<?> getClass()返回此 Object 的运行时类. 方式二:任意数据类型都具备一个class静态属性. Class c2 = Person.class; 方式三:调用Class类中的静态

深入理解Java类型信息(Class对象)与反射机制(干货)

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/70768369 出自[zejian的博客] 本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,这篇有点偏向内功类文章,主要内容如下: 深入理解Class对象 RRTI的概念以及Class对象作用 Class对象的加载及其获取方式 Class对象的加载 ClassforName方法 Class字面常

粗浅看 java反射机制

什么是  Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifiers( 诸如 public, static 等 ).superclass (例如 Object). 实现之 interfaces(例如 Cloneable),也包括 fields 和 methods 的所有信息,并可于运行时改变 fields 内容或唤起 methods. Java 反射

Java进阶 六 Java反射机制可恶问题NoSuchFieldException

作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个question是从哪里来的.以前也遇到过这样的问题,后来解决了,但是没有写文档,再次相遇这样的问题,傻了. 经过上网一番查找,发现遇到这个问题的小盆友还真不少,这个问题是属于java反射机制里的. 这是一个反射对象时候的异常,已经被捕获了的.这个报错代码是混淆了的,是不是这个question对象被混淆

Java基础 -- 深入理解Java类型信息(Class对象)与反射机制

一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RTTI的说法则是源于<Thinking in Java>一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种: 传统的”RTTI”:它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须已定义好): 反射机制,它允许我们在运

深入理解Java类型信息(Class对象)与反射机制

深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RRTI的说法则是源于<Thinking in Java>一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种:传统的"RRTI",它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类

java反射机制笔记

概念:类和对象之间的关系-->类是对象的一种描述,对象是一类实物的一个具体实例子 反射:得到元数据的行为,得到类 中所有成员和行为德尔一种机制 Class是对一切类的行为和状态的抽象 Class类:用于描述一切类/接口/枚举/注解,枚举是一种类,注解是一种接口. Class实例:就是指JVM(java虚拟机)中的一份字节码, 为了明确区分Class实例表示的是哪个类的字节码.Class类提供了泛型. 1.对象有编译类型和运行类型: Object obj = new Date(); 编译类型为:O