java根据类名创建类对象

import java.lang.annotation.*;
/**
 * @date: 2022/6/15 20:36
 * @desc: 请求映射注解
 */
@Target({ElementType.TYPE, ElementType.METHOD}) // 作用在类型或方法上
@Retention(RetentionPolicy.RUNTIME) // 注解信息在运行时出现
@Documented
public @interface ZyRequestMapping {
    String value() default "";
}
import java.lang.annotation.*;
/**
 * @date: 2022/6/14 22:11
 * @desc: 控制层注解
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ZyController {
    String value() default "";
}
package com.testPack;
/**
 * @date: 2022/6/14 22:09
 * @desc: 控制类
 */
@ZyController
@ZyRequestMapping(value = "testController")
public class TestController {
    public String name;
}
import com.testPack.TestController;
import com.testPack.ZyController;
import com.testPack.ZyRequestMapping;
import java.util.List;
public class CreateClsObj {
    /***
     * @param: List 类名集合
     * @desc: (1)根据类名创建类对象
     * (2)获取控制类上ZyRequestMapping请求映射注解值
     * */
    public void cckage(List classNames) throws Exception {
        for(String className : classNames) {
            Class cls = Class.forName(className);
            // 判断类上注解是否带有控制层注解
            if(cls.isAnnotationPresent(ZyController.class)) {
                ZyRequestMapping zyRequestMapping = (ZyRequestMapping)cls.getAnnotation(ZyRequestMapping.class);
                String rmValue = zyRequestMapping.value();
                Object objController = cls.newInstance();
                System.out.println("这是通过Class.forName反射机制创建的objController");
                TestController testController = (TestController)objController;
                testController.name = "张三";
                System.out.println("输出name成员属性:"+ testController.name);
            }
        }
    }
}
// 测试代码
        CreateClsObj iclassNameTest = new CreateClsObj();
        List classNames = new ArrayList();
        classNames.add("com.testPack.TestController");
        iclassNameTest.cckage(classNames);
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章