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);