package test;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class ReflectTest {
public static void main(String[] args) throws Exception {
//1.加载配置文件
//1.1创建Properties对象
Properties pro=new Properties();
//1.2加载配置文件,转换为一个集合
//1.2.1获取class目录下的配置文件
ClassLoader classLoader=ReflectTest.class.getClassLoader();//获得字节码文件下的类加载器
InputStream is=classLoader.getResourceAsStream("pro.properties");
pro.load(is);
//2.获取配置文件中定义的数据
String className=pro.getProperty("className");
String methodName= pro.getProperty("methodName");
//3.加载该类进入内存
Class cls=Class.forName(className);
//4.创建对象
Object obj=cls.newInstance();
//5.获取方法对象
Method method=cls.getMethod(methodName);
//6.执行方法
method.invoke(obj);
}
}
//用注解来代替配置文件!!!!!
package test;
import cn.itcast.domain.Pro;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
@Pro(className = "cn.itcast.domain.Person",methodName = "eat")
public class ReflectTest2 {
public static void main(String[] args) throws Exception {
//1.解析注解
//1.1获取该类的字节码文件对象
//ReflectTest2.class该类字节码文件对象ReflectTest2
Class<ReflectTest2> reflectTest2Class = ReflectTest2.class;
//1.2获取上边的注解对象
Pro an = reflectTest2Class.getAnnotation(Pro.class);//其实就是在内存中生成了一个该注解接口的子类实现对象 联系多态
/**
* 此时相当于下列代码
* public class ProImpl implements Pro{
* public String className(){
* return "cn.itcast.domain.Person"; //return的值与注解赋值有关!!
* }
* public String methodName(){
* return "eat"; //return的值与注解赋值有关!!
* }
*/
//1.3调用注解对象中定义的抽象方法,获取返回值;
String className = an.className();
String methodName = an.methodName();
//验证一下
System.out.println(className);
System.out.println(methodName);
//后面部分和配置文件的后续操作一样ctrl+v
//3.加载该类进入内存
Class cls=Class.forName(className);
//4.创建对象
Object obj=cls.newInstance();
//5.获取方法对象
Method method=cls.getMethod(methodName);
//6.执行方法
method.invoke(obj);
}
}
java 用注解来代替配置文件
最新推荐文章于 2023-12-01 17:36:28 发布
这篇文章展示了如何使用Java反射API动态加载和执行类的方法,首先通过Properties加载配置文件获取类名和方法名,然后通过反射创建对象并执行相应方法。此外,还介绍了如何利用注解替代配置文件,直接从注解中获取类名和方法名,简化代码并增强可读性。
摘要由CSDN通过智能技术生成