关于ssm的注解问题-@Autowired和@Resource的区别

Posted JIANGJIZE1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ssm的注解问题-@Autowired和@Resource的区别相关的知识,希望对你有一定的参考价值。

关于ssm的注解问题-@Autowired和@Resource的区别

@Resource:是用来实现依赖注入的,此注解是byName自动注入的,@Resource注解由J2EE提供,
需要导入包javax.annotation.Resource。

@Autowired:也是用来实现依赖注入的,但是此注解是byType自动注入的.@Autowired为Spring提供的注解,
需要导入包org.springframework.beans.factory.annotation.Autowired。

@Resource

步骤:@Resource默认通过byName注入,如果没有匹配则通过byType注入

举例:

@Service
public class RoleServiceImpl1 implements RoleService

@Service
public class RoleServiceImpl1 implements RoleService

@Resource
private RoleService roleService;

首先通过byName匹配,变量名roleService无法匹配IOC容器中任何一个id(这里指的roleServiceImpl1 和roleServiceImpl1 ,于是通过byType匹配,发现类型RoleService的实现类有两个,仍然无法确定,于是报错。

同时@Resource还有两个重要的属性:name和type,用来显式指定byName和byType方式注入

使用:对应4种情况

// 1. 默认方式:byName
@Resource  
private RoleService roleDao; 

// 2. 指定byName
@Resource(name="roleService ")  
private RoleService roleDao; 

// 3. 指定byType
@Resource(type=RoleService .class)  
private RoleService  roleService ; 

// 4. 指定byName和byType
@Resource(name="roleService ",type=RoleService .class)  
private RoleService roleService ; 

@Autowired

举例:

首先有一个接口UserService和两个实现类UserServiceImpl1和UserServiceImpl2,并且这两个实现类已经加入到Spring的IOC容器中了

@Service
public class UserServiceImpl1 implements UserService

@Service
public class UserServiceImpl2 implements UserService

通过@Autowired注入使用

@Autowired
private UserService userService;

根据上面的步骤,可以很容易判断出,直接这么使用是会报错的
原因:首先通过byType注入,判断UserService类型有两个实现,无法确定具体是哪一个,于是通过byName方式,这里的变量名userService也无法匹配IOC容器中id(此处指的userServiceImpl1和userServiceImpl2),于是报错。

注意:通过注解注入到IOC容器的id值默认是其类名首字母小写

解决方案

方式一:

// 方式一:改变变量名
**@Autowired
private UserService userServiceImpl1;**
方式二:

// 方式二:配合@Qualifier注解来显式指定name值
**@Autowired
@Qualifier(value = "userServiceImpl1")
private UserService userService;**

1 什么是Spring IoC容器
Spring IoC负责创建对象、管理对象(通过依赖注入(DI)、装配对象、配置对象,并且管理这些对象的整个生命周期。

2 IoC的优点是什么
IoC或依赖注入把应用的代码量降到最低;
它使应用容易测试,单元测试不再需要单例和JNDI查找机制;
最小的代价和最小的侵入性使松散耦合得以实现;
IoC容器支持加载服务时的饿汉式初始化和懒加载。

以上是关于关于ssm的注解问题-@Autowired和@Resource的区别的主要内容,如果未能解决你的问题,请参考以下文章

关于@Autowired和@Resource注解区别

@Autowired和@Resource的区别

关于@Autowired 与@Resource的

spring统一注入问题

@Autowired注解详解

用实例证明@Autowired和@Resource注解先通过Type还是Name注入