一、起源
@Resource
JSR 250规范中包含了@Resource注解的定义,它提供了一个标准的注解,用于在Java EE应用中进行资源注入。Java EE 5(约合JDK1.5)实现了这个定义。JDK1.8之后将Java EE从JDK中移除。
JSR 250规范内容
@Generated 标记该资源是自动生成的
@Resource 定义了对某个资源的引用
@Resources 容器针对多资源的注解
@PostConstruct 标记在方法上用于依赖注入的初始化动作
@PreDestroy 标记在方法上用于该对象实例从容器销毁时的前置操作
@Priority 定义了该类执行的优先级,比如拦截器的优先级等
@RunAs 定义了应用在Java EE容器运行时的角色
@RolesAllowed 定义了什么安全角色被允许执行方法
@PermitAll 标记在类或方法上允许所有角色执行(所有)方法
@DenyAll 标记在方法上不允许所有角色调用
@DeclareRoles 用于定义系统的安全角色
@DataSourceDefinition 定义一个数据源,并通过JNDI注册到容器
@ManagedBean 定义一个被容器管理的对象
@Autowired
从Spring2.5开始支持,Spring认为只有@Resource是不行的,因此推出了“粒度”更大的@Autowired。
二、区别
- @Autowired 先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找。
- @Resource 先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找。
三、辅助注解
@Qualifier
Spring框架中的一个注解,用于指定具体的Bean,当有多个同类型的Bean时,它可以辅助Spring容器确定依赖注入的确切目标,常与@Autowired组合使用。
@Primary
Spring框架中的一个注解,用于标识一个Bean作为默认的实现类,当存在多个实现类时,通过使用@Primary注解,可以指定其中一个作为默认的实现类,以便在注入时自动选择该实现类。