項目結構與依賴
首先,我們需要添加 Spring 核心依賴:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version>
</dependency>
項目結構如下:
com.example
├── config // 配置類包
│ └── Config.java // 主配置類
├── entity // 實體類包
│ └── Emp.java // 員工實體類
└── Main.java // 程序入口
核心注解解析
Java Config 主要通過以下注解實現 XML 配置的功能:
Java Config 注解 | 對應 XML 配置 | 說明 |
---|---|---|
@Configuration | <beans> | 標識當前類為配置類,對應 XML 配置文件 |
@Bean | <bean> | 聲明一個 Bean 對象,方法名默認作為 Bean 的 id |
@ComponentScan | <context:component-scan> | 配置組件掃描路徑 |
@ImportResource | <import> | 導入 XML 配置文件 |
@PropertySource | <context:property-placeholder> | 導入屬性配置文件 |
@Import | <import> | 導入其他配置類 |
代碼實現
1. 實體類定義
首先創建一個簡單的實體類Emp
:
package com.example.entity;public class Emp {int id;String name;@Overridepublic String toString() {return "Emp{" +"id=" + id +", name='" + name + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Emp() {}public Emp(int id, String name) {this.id = id;this.name = name;}
}
2. 配置類定義
創建配置類Config
,替代傳統的applicationContext.xml
:
package com.example.config;import com.example.entity.Emp;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.*;/*
@Configurable對應于applicationContext.xml
@Bean對應于.xml中<bean id=""></bean>
@ComponentScan("com.wgy")對應于.xml中<context:component-scan base-package=""/>掃注解(創類的注解)
@ImportResource("classpath:applicationContext.xml")對應于.xml中<import resource="classpath:"/>
@PropertySource("classpath:db.properties")對應于.xml中<context:property-placeholder location="classpath:db.properties"/>。可以在@Value("${?}")中寫值
@Import(Other.class) 整合多個java-config
*/
@Configurable
public class Config {@Bean //若未指定注解name屬性,則bean的id = "方法名"public Emp emp(){Emp emp = new Emp(1,"張三");return emp;}
}
3. 主程序入口
創建主程序類,初始化 Spring 容器并獲取 Bean:
package com.example;import com.example.config.Config;
import com.example.entity.Emp;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {/*ClassPathXmlApplicationContext和AnnotationConfigApplicationContext都是Spring框架中用于創建IoC容器的實現類。一個應用只需一個ioc容器!*/AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);Emp stu = applicationContext.getBean("emp", Emp.class);System.out.println(stu);}
}
運行結果
運行Main
類的main
方法,控制臺將輸出:
Emp{id=1, name='張三'}
這表明我們成功通過 Java Config 配置創建了 Spring 容器,并從容器中獲取到了Emp
對象。
擴展說明
容器初始化方式:
- 傳統 XML 配置使用
ClassPathXmlApplicationContext
- 注解配置使用
AnnotationConfigApplicationContext
- 傳統 XML 配置使用
Bean 的命名規則:
- 當
@Bean
注解未指定name
屬性時,默認以方法名作為 Bean 的 id - 可以通過
@Bean(name = "customName")
指定自定義名稱
- 當
配置類的組合:
- 可以使用
@Import
注解導入其他配置類 - 對于大型項目,建議按功能模塊拆分多個配置類
- 可以使用