@Resource与@Autowired
controller层中,使用service,会用@Autowired注解。
severImpl层中,使用mapper,会使用@Resource,
当使用@Autowired时,会提示“Could not autowire. No beans of 'SysDepartRoleMapper' type found. ”
@Autowired
private SysDepartRoleMapper sysDepartRoleMapper;
这是为什么呢?
@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。
@Autowired注释:
@Autowired
private ISysUserService sysUserService;
↓
interface ISysUserService
↓
@Service
public class SysUserServiceImpl implements ISysUserService
--->bean(type=SysUserServiceImpl,name=sysUserServiceImpl)
@Autowired 先查询type=SysUserServiceImpl,后查询name="sysUserServiceImpl"
@Resource 注释:
@Resource 注释,来自于 Java EE 5 ,使用一个 ‘name’ 属性,该属性以一个 bean 名称的形式被注入,遵循 by-name 自动连接语义。
@Resource
private SysDepartRoleMapper sysDepartRoleMapper;
↓
public interface SysDepartRoleMapper extends BaseMapper<SysDepartRole>
<mapper namespace="org.jeecg.modules.system.mapper.SysDepartRoleMapper">
mybaties创建了一个sysDepartRoleMapper的Bean交给了Spring
@Resource 查询name="sysDepartRoleMapper"
mybaties创建的Bean的时候没有创建类型吗? 为什么@Autowired找不到Mapper呢?
从APP的context中,使用name取得bean对比:
Bean(SysDepratRoleMapper)的class是MapperFactoryBean并非SysDepratRoleMapper,
所以使用@Autowaired注入时,提示找不到SysDepartRoleMapper的bean
|
ConfigurableApplicationContext.getBeanDefinition("sysDepartRoleMapper") |
ConfigurableApplicationContext.getBeanDefinition("sysUserServiceImpl") |
| class [org.mybatis.spring.mapper.MapperFactoryBean] | class [org.jeecg.modules.system.service.impl.SysUserServiceImpl] |
| scope=singleton | scope=singleton |
| abstract=false | abstract=false |
| lazyInit=false | lazyInit=null |
| autowireMode=2 | autowireMode=0 |
| dependencyCheck=0 | dependencyCheck=0 |
| autowireCandidate=true | autowireCandidate=true |
| primary=false | primary=false |
| factoryBeanName=null | factoryBeanName=null |
| factoryMethodName=null | factoryMethodName=null |
| initMethodName=null | initMethodName=null |
| destroyMethodName=null | destroyMethodName=null |
|
defined in file [E:\work\My\JEECG-BOOT\jeecg-boot-read\jeecg-module-system\jeecg-system-biz\ target\classes\org\jeecg\modules\system\mapper\SysDepartRoleMapper.class] |
defined in file [E:\work\My\JEECG-BOOT\jeecg-boot-read\jeecg-module-system\jeecg-system-biz\ target\classes\org\jeecg\modules\system\service\impl\SysUserServiceImpl.class] |

浙公网安备 33010602011771号