@Resource反射
时间: 2023-10-06 17:11:31 浏览: 42
反射是一种在运行时检查和修改类、对象、方法和变量的能力。Java中的反射机制提供了许多API,如Class类、Method类和Field类,用于获取目标类的信息,并在运行时动态操作。通过反射,可以实现动态创建对象、调用方法、访问和修改变量等操作。
使用反射可以做到以下几点:
1. 获取类的信息:可以通过Class类的静态方法获取指定类的Class对象,从而获得目标类的各种信息,如类名、包名、父类、接口等。
2. 创建对象:通过Class对象的newInstance()方法可以创建一个类的实例,相当于调用了该类的无参构造方法。
3. 调用方法:通过Method类的invoke()方法可以调用指定对象上的方法,即使该方法是私有的或者带有参数。
4. 访问和修改变量:通过Field类可以获取和设置对象的字段值,即使该字段是私有的。
总之,反射使得我们可以在运行时动态地操作类和对象,扩展了Java的灵活性和可扩展性。但是需要注意的是,反射操作相对于直接调用方法和访问字段来说,会产生一些性能上的损耗,所以在性能要求较高的场景下需要慎重使用。
相关问题
@Resource注入原理
@Resource 注解是用来进行依赖注入的,它可以把一个对象或值注入到另一个对象中。它的原理是通过 Java 语言的反射机制实现的。
当容器扫描到一个类时,如果该类中有 @Resource 注解,容器就会通过反射机制查找对应的对象或值,并将其注入到该类中的指定属性或方法中。通常情况下,容器会根据 @Resource 注解中的 name 属性或类型进行查找。
如果 name 属性为空,则容器会根据属性或方法的名称进行查找,如果找到多个符合条件的对象,则会抛出异常;如果找不到符合条件的对象,则会抛出 NullPointerException 异常。
如果 name 属性不为空,则容器会根据指定的名称进行查找,如果找到多个符合条件的对象,则会根据指定的名称进行匹配;如果找不到符合条件的对象,则会抛出 NoSuchBeanDefinitionException 异常。
总之,@Resource 注解是通过反射机制实现依赖注入的,它可以让我们更加方便地管理对象之间的依赖关系。
@autowired @resource 源码对比
@Autowire和@Resource都是Spring框架中的注解,用于自动装配bean对象。
@Autowire注解是按照类型进行自动装配,即根据类型来自动注入实例对象。如果发现多个同类型对象,则根据标注@Primary的对象进行注入。当然,如果没有指定@Primary,则根据属性名字的字典顺序进行注入。
@Resource注解是按照名称进行自动装配,即根据bean的名称来自动注入实例对象。如果找不到对应名称的对象,则根据类型注入。如果属性没有指定名称,则属性名作为bean对象的名称进行注入。
对于源码实现上,@Autowire注解是使用AutowiredAnnotationBeanPostProcessor这个后置处理器进行处理的,而@Resource注解是使用CommonAnnotationBeanPostProcessor后置处理器进行处理的。
@AutowiredAnnotationBeanPostProcessor的实现类上使用了@Order注解来控制其执行顺序,该注解表示需要先于CommonAnnotationBeanPostProcessor执行。同时,该处理器基于Java的反射机制来实现bean的自动装配。
CommonAnnotationBeanPostProcessor的实现类上使用了@Component注解来表明该类是一个组件,同时使用了@PostConstruct和@PreDestroy注解来标注初始化和销毁方法。该处理器则是基于Java EE的注解实现的,即常用的@Inject、@EJB和@Resource等注解。
总的来说,两者的区别主要在于自动装配的方式和所依赖的注解不同。具体的使用需要根据具体情况进行选择。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)