自定义注解,实现依赖注入 |
您所在的位置:网站首页 › 实现依赖注入的注解是啥啊 › 自定义注解,实现依赖注入 |
自定义注解,实现依赖注入
我们在学习框架的时候使用过各种各样的注解,框架本质就是注解+反射+设计模式的结合,我们在这通过自定义注解简单的实现在属性中注入值。 @Component("user") // 相当于配置文件中 public class User { @Value("王也") // 相当于配置文件中 public String name; }1、首先,我们先自定义一个注解,起名也叫Value @Target(value = {ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Value { String value() default ""; }2、创建一个javabean public class Student { @Value("王也") private String name; private String gender; @Value("18") private int age; public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Student(String name, int age) { this.name = name; this.age = age; } public Student() { } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", gender='" + gender + '\'' + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }3、创建反射类 public class Reflection { public static Object reflection(String path) { Object object = null; try { Class clazz = Class.forName(path); object = clazz.newInstance(); //获取属性 Field[] fields = clazz.getDeclaredFields(); for (int i = 0; i //获取含有注解的属性 Field declaredField = clazz.getDeclaredField(fields[i].getName()); //获取注解 Value annotation = fields[i].getAnnotation(Value.class); declaredField.setAccessible(true); if (declaredField.toString().contains("java.lang.String")){ declaredField.set(object, annotation.value()); }else if(declaredField.toString().contains("int")){ declaredField.set(object, Integer.valueOf(annotation.value())); }else { continue; } } } } catch (Exception e) { e.printStackTrace(); } return object; } }4、创建测试类 public class Test { public static void main(String[] args) throws Exception { Student student = (Student) Reflection.reflection("com.zsn.ann.Student"); System.out.println(student); } }5、测试结果 这是简单理解一下利用反射和注解向属性中注入值,在进一步的话,可以加上代理模式,这样更能使我们理解框架的原理。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |