`
baobeituping
  • 浏览: 1058537 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

利用反射动态加载实现类

阅读更多

最近自己做了一个项目。有一部分是通过不同的业务,调用相同一个类的不同方法产生XML文件。

 

我刚开始的想法就是简单的通过工厂方法,例如

if("a".equals(Type))

{

   ////a方法

}

if("b".equals(Type))

{

   ////b方法

}

由于项目中的类型越来越多造成难以维护。后来为了扩展的方便,采用放射的方式。

例如:

首先是一个接口

public interface XmlFactory {

 public boolean createXml();
}

然后是他的两个实现类

public class DicBaseXml implements XmlFactory {

 String name;
 String path;
 public DicBaseXml(String name,String path)
 {
  this.name = name;
  this.path = path;
 }
 public boolean createXml() {
  System.out.println(name+":"+path+":dicbase");
  return false;
 }

}

 

public class GroupXml implements XmlFactory {

 String name;
 String path;
 public GroupXml(String name,String path)
 {
  this.name = name;
  this.path = path;
 }
 public boolean createXml() {
  System.out.println(name+":"+path+":group");
  return false;
 }

}

 

测试类

import java.lang.reflect.Constructor;


public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  String className = "GroupXml";
  print(className);

 }
 public static void print(String className)
 {
  try {
   Class clazz = Class.forName(className);
   Constructor constructor = clazz.getConstructor(String.class,
     String.class); // 构造函数参数列表的class类型
   XmlFactory test = (XmlFactory) constructor.newInstance("boss","1.txt"); // 传参
   System.out.println(test.createXml());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 

}

 

Java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象(根据安全性限制),无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。例如,反射经常在持续存储对象为数据库、XML或其它外部格式的框架中使用。Java reflection 非常有用,它使类和数据结构能按名称动态检索相关信息,并允许在运行着的程序中操作这些信息。Java 的这一特性非常强大,并且是其它一些常用语言,如 C、C++、Fortran 或者 Pascal 等都不具备的。

但反射有两个缺点。第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。
(因为该部分并不实际参与系统的逻辑部分,所以我考虑使用反射来做)
许多应用中更严重的一个缺点是使用反射会模糊程序内部实际要发生的事情。程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术会带来维护问题。反射代码比相应的直接代码更复杂,正如性能比较的代码实例中看到的一样。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活性的地方——记录其在目标类中的使用

分享到:
评论

相关推荐

    利用反射实现类的动态加载

    ### 利用反射实现类的动态加载 #### 反射技术简介 反射是Java语言提供的一种强大特性,允许运行时动态地获取类的信息并操纵类的对象。这种能力使得开发人员能够在编写程序时不确定具体类的情况下,依然能实现对类...

    Java反射动态加载实例类

    通过本示例,我们不仅理解了Java反射的基本概念和用途,还学会了如何利用反射动态加载并操作实例类。反射提供了一种灵活的方式来处理类和对象,尤其是在编写框架和插件系统时,能够根据运行时的条件动态地加载和执行...

    利用反射动态加载dll

    在本例中,我们将讨论如何利用反射动态加载DLL文件,并结合SQL Server数据库来实现这一功能。 首先,我们需要理解动态加载DLL的基本概念。在传统的编程模式中,DLL(动态链接库)是在编译时静态链接到应用程序中的...

    利用反射,动态加载DLL,卸载DLL

    本篇将深入探讨如何利用反射动态加载和卸载DLL,以及在实际应用中的场景。 首先,我们需要了解DLL(动态链接库)在Windows操作系统中的作用。DLL文件是一组可重用的函数和数据,多个应用程序可以共享它们,以减少...

    C#动态加载DLL主要说明如何通过反射实现动态加载DLL

    在.NET框架中,C#程序员...通过以上解释,我们可以理解如何利用反射在C#中动态加载和执行DLL文件,以及在使用过程中需要注意的关键点。动态加载DLL是.NET开发中的一个重要技巧,它使得我们的应用程序更加灵活和可扩展。

    C#,利用反射动态创建对象

    本篇文章将深入探讨如何利用反射在C#中动态创建对象。 1. **反射基础** 反射是.NET框架提供的一种特性,通过System.Reflection命名空间中的类来实现。主要类包括Assembly(程序集)、Type(类型)、...

    利用反射和代理实现简单的Spring

    如果没有实现接口,就会选择使用CGLIB库生成字节码实现类的代理。 现在,我们来看看如何利用反射和代理实现一个简单的Spring: 1. **依赖注入**:首先,我们需要一个配置类,其中包含bean的定义。这些定义可以是...

    java 利用java反射机制动态加载类的简单实现

    在上述代码示例中,我们看到了如何利用反射来动态加载类并执行特定方法。以下是关于Java反射机制的详细解释以及代码分析: 1. **Java反射机制**:Java反射API包含在`java.lang.reflect`包中,主要类有`Class`、`...

    C# 利用反射动态创建对象

    利用反射,我们可以动态地创建对象,这意味着在代码执行时,我们能够实例化未知类型的对象,这在处理插件系统、动态加载用户界面组件或根据配置文件创建对象时非常有用。 标题中提到的"利用反射动态创建对象",主要...

    利用Type动态创建类实例(C#反射)可以演变抽象工厂

    在C#编程中,反射是一种强大的...总结来说,利用C#的Type和反射机制,我们可以动态创建类实例,进而实现一个动态的抽象工厂,适应不断变化的需求。这种结合使用的方法在处理不确定或扩展性需求较高的系统中非常有用。

    利用反射 实现一个自制的struts

    1. 使用反射加载和实例化Action类。 2. 创建并实现Interceptor接口,利用反射实例化和执行拦截器链。 3. 设计并实现Dispatcher,用反射处理请求转发。 4. 解析配置文件,构建Action和拦截器的映射关系。 这样的实践...

    java 利用反射获取内部类静态成员变量的值操作.docx

    ### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...

    C#实现反射调用动态加载的DLL文件中的方法

    ### C#中使用反射调用动态加载的DLL文件中的...通过以上步骤,我们不仅实现了反射的基本原理,还展示了如何利用反射技术动态地加载和调用DLL文件中的方法,这对于开发过程中需要灵活配置或扩展功能的应用来说非常有用。

    Java技术----实现JAVA的动态类载入机制

    在Java编程语言中,动态类加载机制是一种强大...通过自定义类加载器和利用反射API,我们可以实现更高级的功能,比如动态加载和执行类,或者在运行时修改对象的行为。这使得Java成为一个高度适应性和可扩展的编程语言。

    Java类的反射与动态加载

    动态加载则是利用反射技术,在程序运行时动态地加载类并实例化对象,这为Java应用程序提供了高度的灵活性和可扩展性。下面将深入探讨Java类的反射与动态加载相关知识点。 首先,我们要了解什么是类的反射。在Java中...

    通过反射机制实现动态表单

    本篇主要探讨如何利用反射机制实现动态表单,这在处理不确定数据结构或需要动态生成UI的场景中非常有用。 动态表单的实现通常涉及到以下几个关键知识点: 1. **Class类**: Java中的`java.lang.Class`类是每个类的...

    利用Java的反射与代理实现IOC模式

    当一个Bean需要依赖其他Bean时,Spring会利用反射找到依赖的类并创建实例,然后通过代理机制,如AOP代理,来增强Bean的功能。 总结起来,Java的反射和代理机制在实现IOC模式中起到关键作用。反射用于在运行时解析和...

    C# 反射实例代码 接口方式动态加载dll方式Reflection

    本实例代码主要探讨如何通过接口方式利用反射来动态加载DLL文件,这对于模块化开发和插件式架构非常有用。下面将详细介绍这个过程及其相关知识点。 首先,我们需要理解什么是接口。接口(Interface)在C#中是一种...

    利用类装载器动态加载类并启动类

    3. **启动类**:通过反射调用类的`main`方法,实现类的启动。 ### 示例代码 #### Encrypt 类 ```java public class Encrypt { public static void main(String[] args) throws IOException { FileInputStream in...

Global site tag (gtag.js) - Google Analytics