项目结构与依赖
首先,我们需要添加 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
注解导入其他配置类 - 对于大型项目,建议按功能模块拆分多个配置类
- 可以使用