关于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的区别的主要内容,如果未能解决你的问题,请参考以下文章