Spring 系列教程
- Spring 框架介紹
- Spring 框架模塊
- Spring開發環境搭建(Eclipse)
- 創建一個簡單的Spring應用
- Spring 控制反轉容器(Inversion of Control – IOC)
- 理解依賴注入(DI – Dependency Injection)
- Bean XML 配置(1)- 通過XML配置加載Bean
- Bean XML 配置(2)- Bean作用域與生命周期回調方法配置
- Bean XML 配置(3)- 依賴注入配置
- Bean XML 配置(4)- 自動裝配
- Bean 注解(Annotation)配置(1)- 通過注解加載Bean
- Bean 注解(Annotation)配置(2)- Bean作用域與生命周期回調方法配置
- Bean 注解(Annotation)配置(3)- 依賴注入配置
- Bean Java配置
- Spring 面向切面編程(AOP)
- Spring 事件(1)- 內置事件
- Spring 事件(2)- 自定義事件
前面介紹了Bean的XML配置方法,從Spring 3.0開始,可以使用java代碼配置Bean,替代XML配置。
Java配置與注解配置不同,Java配置是把Java代碼文件當作配置文件,注解配置是在實際Java類中使用注解設置依賴關系。
Java配置也會用到一些注解,主要有:@Configuration、@ComponentScan和@Bean。
1. 通過@Configuration注解創建Java配置類
@Configuration注解標注的類是配置類,用於配置Bean之間依賴關系。
@Import注解允許從另一個配置Java/XML文件加載bean定義。
示例:SpringConfig.java
package com.qikegu.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
@Configuration // 表明這是個Bean的Java配置類
public class SpringConfig {
}
2. 通過@Bean注解定義Bean
要定義一個Bean,可以通過:
- 給一個方法加
@Bean注解 - 方法返回Bean實例
Spring容器會注冊這個Bean,並將方法名作為Bean ID。
示例:SpringConfig.java
package com.qikegu.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
// 定義 App Bean
@Bean(initMethod = "init", destroyMethod = "close" ) // 指定初始化回調,銷毀回調
@Scope("prototype") // 設置Bean作用域
public App app() { // Bean ID = app
return new App(); // 返回App Bean
}
}
3. 注入Bean依賴關系
可以通過讓一個Bean方法調用另一個Bean方法注入依賴項。
示例:SpringConfig.java
package com.qikegu.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
// 定義 App Bean
@Bean
public App app() {
return new App(logger()); // 調用Bean方法logger()注入Logger Bean實例
}
/* @Bean
public App app() {
App app = new App();
Service[] services = {database(), logger(), mail()};
app.setServices(services);
app.setMainService(services[1]);
app.setId(1234);
return app;
} */
// 定義 Database Bean
@Bean
public Database database() {
return new Database();
}
// 定義 Logger Bean
@Bean
public Logger logger() {
return new Logger();
}
// 定義 Mail Bean
@Bean
public Mail mail() {
return new Mail();
}
}
4. 讀取配置類
可以使用AnnotationConfigApplicationContext讀取配置類。
示例:Test.java
package com.qikegu.demo.config;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) {
// 使用`AnnotationConfigApplicationContext`讀取配置類
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
}
}
5. 通過Spring容器獲取bean
示例:
App app = context.getBean("app", App.class);
