导航:更多的spring注解标签点击这里
前言:@Bean是spring中使用最多的一个注解了,虽然我们编程用的可能不多,但spring内部却有无数
我们的@Controller||@RestController||@Service||@Reponsitory都是使用的@Bean逻辑注入的,我们编程使用的最多的一个注解@Autowired让spring注入就是注入的@Bean逻辑,我看了网上很多都乱七八糟的,这里把他的用法和原理详细阐述一下
因为这个注解非常重要,如果你弄不懂这个注解,那么对于spring的原理肯定是云里雾里的,所以我单独剔出来写了一篇
通过源码我们可以看到@Bean提供了value,name,autowire,autowireCandidate,initMethod,destroyMethod六个参数,原型如下
String[] value() default {};
String[] name() default {};
Autowire autowire() default Autowire.NO;
boolean autowireCandidate() default true;
String initMethod() default "";
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
他们分别是什么意思呢?
value:他的意思的为这个bean起一个别名,官方注释如下
/**
* Alias for {@link #name}.
* <p>Intended to be used when no other attributes are needed, for example:
* {@code @Bean("customBeanName")}.
* @since 4.3.3
* @see #name
*/
autowire:这是一个已经过时的参数
autowireCandidate:是否和其他的bean连接起来
这三个意义都不大,最主要的是另外3个
name:为这个bean起一个名字,默认是实现注解的方法的名字
initMethod:bean在初始化的时候调用的方法,与构造函数之后
destroyMethod:bean在销毁的时候调用的方法
我们来看下面一个bean
@Data是lombok提供的注解,如果你还不了解,可以点击这里
接下来我们来使用一些@Bean这种注解
这里我们注入了2个相同的bean
我们来测试一下
上图我先启动了springboot项目,然后调用了一下接口,接着关闭了springboot
从结果我们可以看出这三个参数的方法