@Resource
public interface MyObjectMapperExt extends MyObjectMapper {
// TODO
}
为什么在这个地方不加@Resource的时候,在另外一个地方注入MyObjectMapperExt会失败?
@Autowired
private MyObjectMapperExt myObjectMapperExt;
会注入失败,提示无法注入。是什么原因?而且@Resource是mybatis自动生成的。
@Resource
public interface MyObjectMapperExt extends MyObjectMapper {
// TODO
}
为什么在这个地方不加@Resource的时候,在另外一个地方注入MyObjectMapperExt会失败?
@Autowired
private MyObjectMapperExt myObjectMapperExt;
会注入失败,提示无法注入。是什么原因?而且@Resource是mybatis自动生成的。
@Resource 注解式声明,你没有声明使用@Autowired找不到bean
可以简单的这么理解,一个叫spring的资源池,你要使用@Resource @Controller 等方法往池里做声明,就放进去了
使用@Autowired @Named 等方法从里面取出来
@Resource
表示该bean交由spring容器来管理,一般情况下会将resource写在类或者接口的实现类上,而不是直接写在接口上。让spring容器管理的意思就是你想要实例化该类的时候,spring会自动帮你创建对象。
@Autowired
表示该属性(一般写在属性或者set方法上)让spring来自动注入。只有spring容器中有该资源(加了resource的bean当作一个资源对待)的话,spring才可以给你自动注入。spring容器中没有该资源时你再自动注入肯定找不到资源报错。
恰当而又不恰当的例子
火车站有个包寄存器(Spring容器),你想将你的包寄存到容器中。你就在包上贴了个@Resource标签,工作人员给你一个小条,表示该资源属于你。当你想拿包(获取该资源)的时候,你可以拿着小条(@Autowired)去包寄存器中找该资源。
如果你的包确实寄存在容器里了,那就根据你的小条给你包。
如果你没有把包寄存到容器里,还想问工作人员要包,那就报错。你就开始了和工作人员的决斗中。。。。。。。。。。。。。。
Spring是很正直的,有就给你,没有就是没有,没有资源的情况下,你再问我要。我就给你报错!!!
PS:感觉举的例子好乱,自己理解去吧。
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
这是
@Resource
注解的介绍,@Resource
用在字段或者方法上的时候,Spring会从容器里面寻找需要的类型Bean,@Resource
用在类上的时候,Spring会把当前类作为资源放入Spring容器。@Autowired
注解表示让Spring容器自动注入这个bean,@Resource
表示把当前注解的类交给Spring容器管理,你不使用@Resource
注解,Spring容器就不会加载这个类型的bean,需要注入的时候自然就报错了你把
@Resource
用在interface上面也是有问题的吧 应该放在实现类上面