SpringBoot入门教程(十六)@Autowired、@Inject、@Resource

162 阅读2分钟

@Resource,@Autowired,@Inject 这3种都是用来注入bean的,它们属于不同的程序中。详情参见下表:

v区别

ANNOTATIONPACKAGESOURCE作用域实现方式其它
@AutoWiredorg.springframework.bean.factory,Spring自带的方式Spring 2.5+可以用在构造器、方法、属性、参数、注解上面通过AutowireAnnotationBeanPostProcessor类实现依赖注入注入可以根据名字/类型,可以设置required属性为false指定找不到相应bean时不抛异常
@Resourcejavax.annotation,是JSR-250标准,JDK6以上自带,Spring版本要求2.5以上Java JSR-250可以用在方法、属性、类上通过CommonAnnotationBeanPostProcessor类实现依赖注入与@AutoWired一致。但可以指定name属性来指定beanName,但如果name对应的bean不存在,则会抛出异常,且没有required属性
@Injectjavax.inject,是JSR-303标准,Spring版本3以上。需要导入外部依赖Java JSR-330可以用在方法、属性、构造器上通过AutowiredAnnotationBeanPostProcessor类实现依赖注入与@AutoWired一致,区别在于@Inject没有required属性

v实现方式

2.1 @Inject

如下是@Inject的使用,不加@Named注解,需要配置与变量名一致即可。

    @Inject
    @Named("mongo")
    private Mongo mongo;

2.2 @Autowired

@Autowired有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错。

    @Autowired
    private MongoTemplate mongoTemplate;

2.3 @Resource

@Resource一般会指定一个name属性,如下

    @Resource(name = "testMapper")
    private TestMapper testMapper;

v源码地址

github.com/toutouge/ja…


作  者:请叫我头头哥
出  处:www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐 一下。您的鼓励是作者坚持原创和持续写作的最大动力!\