@autowired注解的作用_Java Spring注解三:@Bean和@Autowired,Java的新基建和新动能

55787c355ae310652be29731a62313ee.png

最近一个同事问我一句“@Bean和@Autowired有啥区别?”,我当时有点惊讶,中午午休好好吃饭,怎么想起问这个?原来是他一个同学求职面试问到这个,现在问他该怎么回答。我当时回答是:

“这个@Bean的注解就是替代我们之前配置spring的XML文件里面的<bean>的,毕竟按照配置文件的方式,在Java文件上用写代码写个bean,然后再去XML文件通过<bean>注册,来回操作太麻烦,直接在当前用到的直接写。一般来说现在涉及到框架或者特别的业务处理会用到这个,比如我们shiro自定义自己的登录逻辑和方式,会用到。

@Autowired注解平常使用的频率要高的多,修饰变量和方法,自动装配(需要外部资源注入)”

实际上回答很官方,但是自己仔细思考,发现有点怀疑自己,他俩到底有啥本质不同呢?他俩的用途有啥不同呢?一般来说在spring中都是什么样的位置?感觉突然进入了自己的知识盲区,一想到自己也搞了几年了,spring一直用,这些注解也在用,突然有点说不出所以然,这怎么能行,查文档看资料搞起来。

首先来看看这连两个本尊长什么样

这个是@Bean的使用

@Configuration
public class ZPConfiguration {

    @Bean
    public ZPSmart zpSmart() {
        return new zpSmart();
    }

    @Bean
    public ZPHandsome zpHandsome() {
        return new zpHandsome();
    }

这个是@Autowired

//这应该是最常见的,@Autowired修饰常量
@Autowired
private ZPHandsome zpHandsome;

//Autowired修饰的方法用的相对就少
 @Autowired
 public ZPIsVeryIntelligent(ZP zp) {
    this.dataSource = dataSource;
 }

首先@Bean修饰的只有方法,并且功能单一,就是初始化一个bean然后交给IOC容器管理。

@Autowired可以修饰常量和方法,用于自动装配(说白了,自动装配的前提你要先有才能装配,你直接引用资源就行,没有相当于白扯)

我自己从自己个人理解角度讲,@Bean类似于我们的spring基础设施,他是方法级别的注解,他一般是跟 @Configration ,@Component, @Repository ,@Controller ,@Service这些注解搭配,作用是把这个类注册一个bean来交给spring的IOC管理。

@Autowired同样也是跟上面这些搭配,但是他的作用是“自动装配”,比如说我们controller层调用service层,首先这个service要注册过或者被@Service注解修饰过,容器里面有才行,要不然没办法去装配。

套用现在流行的词汇,@Bean等一些注解提供了注册构建等作用,相当于将对应的放进IOC容器中完成了一个“基础建设”,我们通过@Autowired注解在这些“基础建设”上面添砖加瓦,面向业务逻辑编程,让代码从脚手架变成有意义的工程,焕发“新动能”。

所以说分清楚两者作用,不能只看里面的细节和形式,还是要从用途来着手。这里我说一下spring 5.0版本以上的文档相关资料的位置。

最近找到的spring新的文档和旧的spring4.0版本对比,感觉很多小目录没有标出来,一眼看过去,好像东西没有了,实际都藏在1.12 基于Java的容器配置上,和以前的文档对比还是还在IOC容器大类下去,大家还是多多看官方一手资料,多看一眼英文的,因为国内有的翻译做的还没有谷歌浏览器自带的翻译好,觉得晦涩难懂的地方,可以去看一眼英文版对应的位置,也许有新的收获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值