@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]



 

posted @ 2022-09-08 18:08  武才珍  阅读(165)  评论(0)    收藏  举报