Java注解+反射机制

本文探讨了Java中的注解及其作用,包括JDK内置注解和元注解,阐述了注解在编译检查、文档生成和动态处理等方面的应用。同时,详细介绍了反射机制,说明了其在动态创建对象和获取类信息上的功能,并指出反射常用于框架如Spring。此外,还讨论了注解与反射的结合使用以及反射的优缺点,如灵活性提升但可能带来的安全问题和性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解

分类:

  • JDK内置注解有:@Override、@SuppressWarning等

  • 元注解:解释注解的注解。元注解有:@Target 表明注解作用与类的什么位置(类、属性、方法)

    @Retention 表明注解的运行实际(运行时、编译时,默认编译期,比如@Oveerride)

注解的作用

编译检查、生成文档、运行时动态处理、编译时动态处理

反射

在程序运行期间动态创建对象,动态获取类的信息

反射应用场景

反射和自定义注解结合使用

各种框架大量使用了反射机制,比如Spring的@Component、@Value

注解相当于一个标识,注解的实现基于反射


public class Generic {
    public static void main(String[] args) throws Exception {
        // 利用反射获取对象
        Class<A> aClass = A.class;
        MyComponent myComponent = aClass.getDeclaredAnnotation(MyComponent.class);
        System.out.println(myComponent);
        if(myComponent != null){
            // 创建对象
            Constructor<A> constructor = aClass.getConstructor(null);
            A a = constructor.newInstance(null);
            Field[] fields = aClass.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                MyValue annotation = field.getAnnotation(MyValue.class);
                if(annotation != null){
                    if(field.getType().getName().equals("java.lang.Integer")){
                        field.set(a, Integer.parseInt(annotation.value()));
                    }else if(field.getType().getName().equals("java.lang.String")){
                        field.set(a, annotation.value());
                    }
                }
            }
            System.out.println(a);
        }
    }

}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface MyValue{
   String value();

}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyComponent{

}

@Data
@MyComponent
class A{

    @MyValue("1")
    private Integer id;
    @MyValue("zs")
    private String name;

}

反射机制的优缺点

让代码更灵活,为各种框架提供了开箱即用的功能

缺点是:在运行时有了获取类信息的能力,但是增加了安全问题。反射的性能稍微差点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值