这几天一直在找java中是如何实现delphi中使用元类统一管理实例创建并通过统一接口操作的方法.
java反射机制就是用来解决这一系列问题的,平且java中还有spring框架的Ioc帮助你完成这个功能.
首先看一下java是如何通过字符串创建一个类;为了简单省略了字符串与java类对应的方法,
Class c = null;
c = Class.forName("com.zsk.reflection.UserReflection");
有了这个类我们如何创建实例呢?
Object o = c.newInstance();
找到了方法这些东西都是很简单的.
一般的方法都是通过父类或者接口来操作这个o对象.
如果你在多想想,这几行代码的思路可以做出很强大支撑库.
简单的代码如下:
package com.zsk.reflection;
public class UserReflection {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Class c = null;
try {
c = Class.forName("com.zsk.reflection.UserReflection");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.err.println("Class not found.");
System.exit(1);
}
try {
Object o = c.newInstance();
System.out.println(o.toString());
} catch (InstantiationException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.err.println("Class not accessible.");
System.exit(1);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.err.println("Class not instantiable.");
System.exit(1);
}
}
}
前文还说了spring的Ioc,我是刚接触java又很多东西都是从Delphi方面理解过来的.错误的地方还请大家指正.
我想要做的功能spring已经帮我实现了,我做了一个Demo如下:
package com.zsk.springtest;
public interface IFruit {
public void grow(String msg);
}
package com.zsk.springtest;
public class Apple implements IFruit {
public void grow(String msg) {
// TODO Auto-generated method stub
System.out.println("苹果生长---" + msg);
}
}
package com.zsk.springtest;
public class Grape implements IFruit {
public void grow(String msg) {
// TODO Auto-generated method stub
System.out.println("葡萄生长---" + msg);
}
}
package com.zsk.springtest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestFruit {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IFruit fruit = (IFruit) context.getBean("fruitId");
fruit.grow("长的不错吗^_^");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="fruitId" class="com.zsk.springtest.Grape" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
</bean>
<!--
<bean id="fruitId" class="com.zsk.springtest.Apple" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
</bean>
-->
</beans>
这就实现了用过一个字符串创建一个类,并同过统一的接口进行操作.
可以修改一下xml文件看看效果
分享到:
相关推荐
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够在运行时创建和访问这些类的对象。在Java中,反射提供了对类对象的元数据(metadata)的访问,使得我们可以...
总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...
Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用类的方法等。通过反射,程序可以动态地创建对象和调用其方法,从而实现更灵活的功能。 #### 二、Java反射机制的由来与发展 Java反射机制...
Java反射机制是Java编程语言中的一个强大工具,它允许运行时动态访问类的信息,包括类名、属性、方法以及构造器等。通过反射,我们可以在程序执行过程中创建和操作任何类的对象,即使在编译时未知其具体类型。这种...
### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...
通过上述实例,我们可以看到Java反射机制在许多实际场景中的应用,它扩展了Java代码的灵活性和可扩展性。然而,也应注意,过度使用反射可能会引入复杂性和潜在的安全风险,因此在设计和实现时需权衡利弊。在理解了...
本文将深入探讨Java反射机制,并通过一个具体的示例来演示如何使用反射动态加载实例类。 #### 一、Java反射概述 Java反射API主要由以下类和接口组成: - `java.lang.Class`:表示一个类或接口的信息。 - `java....
然后,`newInstance()` 方法用来创建该类的新实例。接着,通过 `getMethod()` 获取指定的设置字段的方法(在这里是 `setName`),并传入参数类型来指定方法签名。最后,`invoke()` 方法被用来执行这个方法,将参数值...
在这个示例中,程序接收命令行参数作为类名,然后使用`Class.forName()`方法加载该类,并获取它的所有声明的方法。接着遍历这些方法并输出每个方法的名字。 #### Java反射的限制与注意事项 虽然Java反射机制提供了...
这个实例将深入探讨Java反射机制的使用,通过具体代码示例来阐述其工作原理和应用。 在Java中,反射机制主要用于在运行时获取类的信息,包括类名、方法名、参数类型等,并且可以动态调用对象的方法或访问对象的属性...
在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...
Java反射机制是Java语言提供的一种基础功能,通过反射...总的来说,Java反射机制为Java程序提供了高度的灵活性和动态性,在需要动态创建类实例、访问或修改对象属性以及调用方法的场合,反射机制是一个非常有力的工具。
在"Java反射机制学习(二)"这篇博文中,作者可能详细解释了以上这些概念,并通过`BaseTest.java`和`Student.java`这两个示例文件进行了实例演示。`BaseTest.java`可能包含了一组基础的反射操作,而`Student.java`...
Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建对象,调用方法等。这为Java程序带来了极大的灵活性和扩展性...
Java反射机制允许我们动态地获取类的信息,并在运行时创建和调用对象的方法。这种能力使得Java具有高度的灵活性和动态性,特别是在处理跨版本兼容性、元数据操作以及插件系统等方面。 二、反射的基本使用 1. 获取...
- **`Class`实例的生成**:当JVM加载一个类时,会创建一个唯一的`Class`实例来表示该类。这个实例包含了关于该类的所有信息,如类名、超级类、实现的接口、字段、方法等。 - **`Class`实例的获取**:可以通过多种...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...
例如,使用`Class.forName()`方法可以获取到任何类的`Class`对象,然后通过这个对象来访问和操作该类的信息。 ```java try { Class<?> clazz = Class.forName("com.example.MyClass"); } catch ...