導航:更多的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
從結果我們可以看出這三個參數的方法