自定义注解,实现依赖注入

您所在的位置:网站首页 实现依赖注入的注解是啥啊 自定义注解,实现依赖注入

自定义注解,实现依赖注入

2023-12-15 15:24| 来源: 网络整理| 查看: 265

自定义注解,实现依赖注入

我们在学习框架的时候使用过各种各样的注解,框架本质就是注解+反射+设计模式的结合,我们在这通过自定义注解简单的实现在属性中注入值。

@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