Bean 代表的是由 IoC 容器(IoC Container)管理的Java物件,這些物件構成了程式的邏輯,並且在整個專案中,可以被不同的 Class 分享&使用。
在Spring的 IoC 容器中,它可以管理一至多個 Bean
在Spring中,我們有幾種方式可以配置 Spring Bean:
基於XML檔案的配置,這在Spring中是比較傳統的配置方式,官方的範例如下:
<bean id="userManager" class="com.stuff.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
<bean>
元素定義了需要被Spring IoC 容器管理的 Bean,可以透過id標籤去指定它是屬於哪個類別(Class)
<property>
元素可以設定Bean的屬性,ref標籤來指定另一個Bean的依賴關係
基於註解(Annotation)的配置,Spring 提供了一些註解( @Component
、 @Service
、@Controller
、@Repository
…等,後續會再一一介紹),它允許使用註解來標註類別(Class)並讓他們自動註冊為Bean。而我們可以透過在需要使用依賴的類別中加入@Autowired
註解,自動注入依賴。
但在使用基於註解的配置時,通常需要在配置類或 XML 配置中啟用Bean的掃描,如果沒有這麼做的話,Spring IoC 容器無法自動發現也無法使用註解標註的Bean,造成這些Bean無法被注入,也無法透過Spring IoC 容器進行管理。
基於註解的配置的範例如下:
@Service
public class UserService {
// 加入方法...
}
@Controller
public class UserController {
// 加入方法...
}
後續會再逐一介紹各個Bean的使用方式
基於Java的配置,如果想要使用基於Java的配置,就得先認識@Bean
和@Configuration
這兩個Bean。
基於Java的配置範例如下:
```java
@Configuration
@ComponentScan(basePackages = "com.example")
public class ApplicationConfig {
@Bean
public MyService myService() {
return new MyService();
}
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
}
```
`@Bean`註解主要是用來將一個方法實體化,這個方式與使用XML檔案配置中<bean>元素設定的方式相同。
`@Configuration`註解通常會使用在類別上,表示這個類的方法創建時,應由Spring IoC的容器進行管理。
`@ComponentScan`註解用於告訴Spring讓它自動掃描指定路徑下是否包含了其他註解(例如:`@Service`、`@Controller`、`@Repository`…等),它會將他們註冊成為Bean,並讓Spring IoC 容器進行管理。
Spring 框架的核心在於透過 IoC 容器來管理 Bean,從而實現 IoC 和 DI 的功能。如果沒有 Bean,Spring 容器就失去了管理對象的核心元素,自然也無法實現 IoC 和 DI 這些設計模式。
沒有 Bean,就沒有 IoC 和 DI