品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
很多开发者刚接触Spring时,对Bean的概念一头雾水,我们写的明明是Java代码怎么突然就冒出个“豆子”来?后来才搞明白,这不过就是Spring容器管理的对象换了个说法而已,我们理解了这一层再往下学就顺多了。如果我们只是懂概念,还不够,我们真正要解决的问题是实际开发中怎么把这些Bean交给Spring管理?下面给大家介绍一下Spring Bean怎么理解,Spring Bean的三种配置方式的相关内容。
一、Spring Bean怎么理解
我们可以简单理解为Spring Bean就是由Spring IOC容器负责实例化、装配和管理的对象。平时我们在写代码的时候,对象基本都是我们自己手动去new出来的,new完就用,用完就交给GC处理,但是Bean可不一样,它的创建、初始化、销毁全程都交给容器管,我们不用去操心怎么new它,主动权早就从我们手里转到了容器里。

有很多新手伙伴不解的是Bean和普通对象有什么区别,我们从class的角度来看的话好像并没什么本质区别,觉得Bean就是普通的Java对象,其实我们主要看生命周期是不是被Spring接管了,一个类哪怕写得再普通,只要被注册进容器、由容器负责实例化,它就是个Bean。

容器管理Bean之后帮我们完成很多工作,像Bean什么时候创建、用构造方法还是工厂方法创建Bean、依赖的东西从哪儿注入、初始化时要不要执行某个方法、销毁前要不要做清理,这些事情在Spring内部都通过BeanDefinition来描述,每个Bean在容器里都对应一份配置说明书,容器就是照着这份说明书去干活的。

可以简单理解为Bean是被容器全权接管生命周期的对象,创建、装配、销毁的主动权都不在我们手里,而是在容器手里。
二、Spring Bean的三种配置方式
在知道了Bean是什么后很多伙伴着急想知道怎么把普通类变成Bean,之前我们刚接触Spring的时候,是从XML配置开始入门的,就是写一个名为applicationContext的xml配置文件,里面用标签声明每个类,属性怎么注入、构造方法用什么参数,全写在XML里。这种方式可以让配置和代码分离,但是类一多,XML文件就大了,所以现在纯XML配置的项目已经不多见了,不过在一些老项目或者Spring Boot出现之前的项目里还是能看到。

现在用得比较多的是通过注解配置Bean,在类上加@Component,或者它的变体例如@Service这样的注解,Spring扫描到这些注解就会自动把类注册成Bean,不用再写XML了,不过我们需要指定扫描的包路径,依赖注入的话我们可以用@Autowired按类型自动装配。虽然代码和配置放一块,但是写起来省事,IDE也能给出更好的提示和跳转。

还有一种方式是用@Configuration标注一个配置类,里面的方法加上@Bean,方法返回值就会被注册成容器里的Bean,方法名默认就是Bean的ID。这样做的好处是配置本身是Java代码,类型安全,能享受到编译期检查,也能用if/for这类控制逻辑动态决定要不要注册某个Bean,灵活性比XML和纯注解都要高,像Spring Boot的自动配置,底层大量用的就是这种方式。

以上就是Spring Bean怎么理解,Spring Bean的三种配置方式的全部内容了。Bean其实可以理解为我们把控制权交给了Spring容器,Spring有三种配置方式,其中XML虽然较为老旧但更加直观,注解使用便捷但配置相对隐式,Java配置灵活又能兼顾类型安全,我们在工作中真不用纠结选哪种方式,项目里用的是什么我们就跟着用什么,混着用也很正常。