java 用反射将properties里面的class配置文件 ,类加载取出

java 用反射将properties里面的class配置文件 ,类加载取出,第1张

这是我写的小测试程序,是不是你要的结果:

首先分为两个包,一个是 com.test.properties

这个包里猜竖 有两个迟宴类:一个是

Property,代码穗旦大如下:

package com.test.properties

public class Property {

public void run() {

System.out.println("run invoke!!")

}

}

还有一个是TestProperty测试用的,

代码如下:

package com.test.properties

import java.io.File

import java.io.FileInputStream

import java.io.InputStream

import java.lang.reflect.Method

import java.net.URL

import java.util.Properties

public class TestProperty {

public static void main(String[] args) throws Exception {

URL url = TestProperty.class.getResource("/")

String basePath = url.getPath().substring(1)

String path = basePath + "properties/class.properties"

InputStream input = new FileInputStream(new File(path))

Properties ps = new Properties()

ps.load(input)

String cPath = ps.getProperty("Property")

Class<?>pClass = Class.forName(cPath)

Object instance = pClass.newInstance()

Method[] methods = pClass.getDeclaredMethods()

for(Method m : methods){

m.invoke(instance, new Object[]{})

}

}

}

还有一个包是 :

properties包,

有个 属性文件:

class.properties

内容如下:

Property=com.test.properties.Property

这是全部测试数据。希望能帮到你

//Test.java

import java.util.*

import java.io.*

import java.lang.reflect.*

public class Test {

public static void main(String[] args) throws Exception {

InputStream in = Test.class.getClassLoader().getResourceAsStream("prop.properties")

Properties pro = new Properties()

pro.load(in)

in.close()

String className = pro.getProperty("class")

Class c = Class.forName(className)

Object o = c.newInstance()

Method m = c.getMethod("run")

m.invoke(o)

}

}

//Demo.java

public class Demo {

public void run() {

System.out.println("run() method has been invoked")

}

}

//prop.properties

class=Demo

第一种:通过forName()方法;

第二种:类.class;

第三种:对象.getClass()。

举例如下:

package

test

public class Demo{

public static void

main(){

Class<?>c1 = null

Class<?>c2 =

null

Class<?>c3 =

null

//三种反射用实例化方式

try{

//最常用的一种形式

c1 =

Class.forName("test.X")

}catch(ClassNotFoundException

e){

e.printStackTrace()

}

//通过Object类中的方法实例化

c2

= new X().getClass()

//通过类.class实例化

c3 =

X.class

System.out.println("类名:" + c1.getName())

//得到类名

System.out.println("类名:" + c2.getName())

/侍枣/得到类名

 仿谈瞎 System.out.println("类名:" + c3.getName())

//得到备空类名

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12269812.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存