`
blueskylan
  • 浏览: 98708 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过反射获取类的实例

阅读更多


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;



/**
* 该类的功能:通过反射获取类的实例
*
*/
public class ClassLoaderFactory {

public ClassLoaderFactory() {
super();

}

/**
* 功能:通过一般方法(有参数)获取实例(私有构造方法--单例)
*
* @param methodName:方法名
* @param className:类名
* @param pro:参数值
* @return
*/
public static Object loadClassByMethod(String methodName, String className,
Properties pro) {
Class c = null;

try {
c = Class.forName(className);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Method method = null;

try {
method = c.getMethod(methodName, new Class[] { Properties.class });// 方法参数的类型为:Properties
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Object o = null;

try {
// o=method.invoke(c,null);
o = method.invoke(c, new Object[] { pro });// 方法参数的值为:pro
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return o;
}

/**
* 功能:通过一般方法(无参数)获取实例(私有构造方法--单例)
*
* @param methodName:方法名
* @param className:类名
* @return
*/
public static Object loadClassByMethod(String methodName, String className) {
Class c = null;

try {
c = Class.forName(className);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Method method = null;

try {
method = c.getMethod(methodName, new Class[] { });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Object o = null;

try {
//o=method.invoke(c,null);
o=method.invoke(c,new Object[] { });
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return o;
}

/**
* 功能:通过构造方法获取实例(有参数的构造方法)
*
* @param className:类名
* @param pro:参数值
* @return
*/
//public static Object loadClassByConstructor(String className, Properties pro) {
public static Object loadClassByConstructor(String className, String beanId) {
Class c = null;

try {
//c = Class.forName(pro.getProperty(className));
c = Class.forName(className);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Constructor ct = null;

try {
//ct = c.getConstructor(new Class[] { Properties.class });// 构造方法的参数类型为:Properties
ct = c.getConstructor(new Class[] { String.class });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Object o = null;

try {
//o = ct.newInstance(new Object[] { pro });// 构造方法的参数值为:Properties
o = ct.newInstance(new Object[] { beanId });
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return o;
}

/**
* 功能:通过空构造方法获取实例
*
* @param className
* @return
*/
public static Object loadClass(String className) {
Class c = null;

try {
c = Class.forName(className);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Object o = null;

try {
o = c.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return o;
}

}
分享到:
评论

相关推荐

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class<Color> colorClass = (Class) Class.forName(...

    通过反射获取Context实例的Demo

    本示例"通过反射获取Context实例的Demo"将展示如何在没有直接Context引用的情况下,通过反射来获取Context。 首先,我们需要了解反射的基本概念。反射是Java提供的一种能够在运行时检查类、接口、字段和方法的能力...

    反射获取Context的实例

    本文将深入探讨如何通过反射获取`Context`的实例,并展示如何利用反射实现一个集成`Toast`的工具类。这在某些场景下非常有用,比如当我们需要在没有直接访问`Context`的情况下显示`Toast`消息。 首先,让我们了解`...

    通过类名获取类的实例对象

    综上所述,通过类名获取类的实例对象在C++中是一种动态类型操作,可能涉及到反射机制的实现、注册-查找表、线程安全、消息传递等多种技术。虽然C++标准库不直接提供这些功能,但我们可以通过宏、模板元编程、RTTI...

    通过反射获得实体类的字段和值

    在深入探讨如何通过反射获取实体类的字段和值之前,我们先来理解一下反射是什么以及它在.NET框架中的作用。反射是一种强大的编程技术,允许运行时动态地获取类型的信息并操作对象。它提供了对程序集、模块、类型、...

    利用反射,根据类得完全限定名获得该类得实例

    #### 反射获取类实例的步骤 要根据类的完全限定名获取其实例,我们需要遵循以下步骤: 1. **加载类**:首先,我们需要使用`Class.forName()`或`ClassLoader.loadClass()`方法来加载指定的类。 2. **创建实例**: ...

    C#反射创建类的实例

    ### C#反射创建类的实例 #### 反射概述 反射是.NET框架提供的一种强大机制,允许程序在运行时检查自身以及其他程序集的信息,并能够创建和操作这些类型。这一特性使得开发人员能够在运行时动态地生成和执行代码,极...

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

    使用反射获取需要创建的类型,并通过Type对象调用`Activator.CreateInstance()`创建实例。 c. 将这个实例返回给调用者,调用者无需知道实际创建的是哪个类型的对象。 4. 示例: 假设有一个接口`IProduct`和多个...

    运用反射得到类中的属性和值

    #### 二、反射获取类中的属性及值 下面,我们将通过具体的代码示例来展示如何使用反射来获取类中的所有属性及其对应的值。 ##### 1. 获取类的信息 首先,我们需要获取目标类的信息。这里使用`getClass()`方法来...

    Cpp反射实例动态使用类厂得到实例类

    本实例将探讨如何在C++中通过类工厂(Class Factory)动态创建对象实例,实现一种简单的反射机制。 首先,`CppReflection.cpp` 文件可能包含了反射的实现主体。在这个文件中,可能会定义一个类或一系列函数,用于...

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

    接下来,我们将通过一个具体的例子来演示如何使用Java反射获取内部类的静态成员变量的值。 ##### 示例代码分析 假设我们有如下的类结构: ```java public class Goods { static class Apple { // 内部类 public ...

    java反射机制学习(二):通过反射获取构造方法并实例化对象

    在本篇文章中,我们将深入探讨如何通过反射获取构造方法并实例化对象,这对于理解和使用Java的动态性至关重要。 首先,我们需要了解`java.lang.Class`类,它是Java中所有类的通用表示。当我们知道一个类的名字...

    C# 反射举例 反射实例

    这个例子展示了如何使用反射创建一个类的实例,设置和获取属性值,以及调用方法。尽管反射功能强大,但也有一些注意事项: - **性能**:反射通常比直接的代码执行慢,因为它涉及到运行时查找和调用。在性能敏感的...

    flash反射实例

    1. **类的动态操作**:你可以通过反射获取类的信息,例如类名、父类、接口以及类的构造函数。这在处理未知类型或者需要动态创建对象的场景下非常有用。 2. **属性访问**:在运行时,反射可以让你读取或修改对象的...

    java反射经典实例

    通过上述实例,我们可以看到Java反射机制在许多实际场景中的应用,它扩展了Java代码的灵活性和可扩展性。然而,也应注意,过度使用反射可能会引入复杂性和潜在的安全风险,因此在设计和实现时需权衡利弊。在理解了...

    java反射实例代码

    2. **获取类信息**: 通过`Class`对象,我们可以获取类的各种属性。例如,`getConstructors()`返回类的所有公共构造器,`getDeclaredConstructors()`则返回包括私有构造器在内的所有构造器。`getMethods()`和`...

    通过java类的路径实例化类并调用方法

    通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法

    C#反射实例讲解C#反射实例讲解

    通过上述实例我们可以看到,C#反射技术为开发者提供了极大的灵活性,但也需要注意性能问题,因为反射操作通常比直接的类型操作要慢。因此,在使用反射时需要权衡其利弊,合理运用这一强大工具。

    java 反射实例,大量注释,简单易懂

    - `Class`类代表运行时的类信息,可以通过`Class.forName()`或对象的`getClass()`方法获取。 - `Constructor`表示类的构造器,可以用来创建类的新实例。 - `Method`代表类的方法,允许动态调用。 - `Field`代表...

Global site tag (gtag.js) - Google Analytics