一、Autowired和Resource的区别

@Autowired和@Resource的区别:在Java中使用@Autowired和@Resource注解进行装配,这两个注解分别是:1、@Autowired按照默认类型(类名称)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许为null,可以设置它的required属性为false如果我们按名称装配,可以结合@Qualifie注解一起使用。如:

@Autowired@qualifie(“personDaoBean”) private PersonDao beanPerson

@Autowired和@Resource的区别:

在Java中使用@Autowired和@Resource注解进行装配,这两个注解分别是:

1、@Autowired按照默认类型(类名称)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许为null,可以设置它的required属性为false

如果我们按名称装配,可以结合@Qualifie注解一起使用。

如:

@Autowired @qualifie(“personDaoBean”)

private PersonDaoBean personDaoBean;

@Resource默认按照名称(name=”test”)进行装配,名称可以通过@resource的name属性设定,当找不到与名称匹配的bean才会按类型装配

注意:如果没有指定name属性,并且安装默认的名称依然找不到依赖对象时,@Resource会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

Spring中注解的实现原理-Autowired和Resource的区别

二、注解原理

Spring对注解的支持主要都是通过反射来获取相应的注解,来做相应的处理,我们的工程中大部分都是使用@Service 和@Autowired来使用,其实我们还可以使用到其他的注解来加快我们的开发,满足我们的多样性需求。

annotation是挺简单的东西.其实就是个声明。然后通过反射去取那些声明了值。

autowire其实也是这个意思。通过反射去看你autowire的方式,通过定义的方式,去给你声明的变量赋值。

通过java的反射机制相关的API来访问Annotation信息。

相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。

Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annotation是“不起作用”的,只能通过配套的工具才能对这些Annotation类型的信息进行访问和处理。

注解本身不做任何事情,只是像xml文件一样起到配置作用。

注解代表的是某种业务意义,注解背后处理器的工作原理如上源码实现:

——首先解析所有属性,判断属性上是否存在指定注解。

——如果存在则根据搜索规则取得bean,然后利用反射原理注入。

——如果标注在字段上面,也可以通过字段的反射技术取得注解,根据搜索规则取得bean,然后利用反射技术注入。

发表评论

邮箱地址不会被公开。 必填项已用*标注