全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Java配置

Java配置(JavaConfig)是Spring 3.0引入,Spring 4.x后成为推荐的配置方式,用纯Java代码替代XML配置。

核心注解

@Configuration

标识配置类,相当于XML配置文件。

Java
@Configuration
public class AppConfig {
    // Bean定义方法
}

@Bean

定义Bean,相当于XML的标签。

Java
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }

    @Bean
    public OrderService orderService() {
        return new OrderService(userService()); // 引用其他Bean
    }
}

完整配置示例

定义配置类

Java
@Configuration
@ComponentScan("com.example")
@Import(DataSourceConfig.class)
public class AppConfig {

    @Bean
    @Primary
    public UserService userService() {
        UserService service = new UserService();
        service.setTimeout(30);
        return service;
    }

    @Bean
    @Scope("prototype")
    public PrototypeBean prototypeBean() {
        return new PrototypeBean();
    }

    @Bean(initMethod = "init", destroyMethod = "destroy")
    public LifecycleBean lifecycleBean() {
        return new LifecycleBean();
    }
}

导入其他配置

Java
@Configuration
@Import({DatabaseConfig.class, WebConfig.class})
public class MainConfig {
}

// 或在导入的配置中引用其他配置的Bean
@Configuration
public class DatabaseConfig {

    @Bean
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

@Configuration
public class ServiceConfig {

    @Autowired
    private DataSource dataSource; // 引用DatabaseConfig的Bean

    @Bean
    public UserService userService() {
        UserService service = new UserService();
        service.setDataSource(dataSource);
        return service;
    }
}

Bean属性配置

作用域

Java
@Bean
@Scope("prototype")
public PrototypeBean prototypeBean() {
    return new PrototypeBean();
}

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public RequestBean requestBean() {
    return new RequestBean();
}

懒加载

Java
@Bean
@Lazy
public LazyBean lazyBean() {
    return new LazyBean();
}

优先注入

Java
@Bean
@Primary
public UserService primaryUserService() {
    return new UserService();
}

@Bean
public UserService backupUserService() {
    return new BackupUserService();
}

条件注册

Java
@Bean
@ConditionalOnProperty(name = "cache.enabled", havingValue = "true")
public CacheService cacheService() {
    return new CacheService();
}

@Bean
@ConditionalOnMissingBean(CacheService.class)
public NoCacheService noCacheService() {
    return new NoCacheService();
}

外部属性注入

@Value注入

Java
@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {

    @Value("${database.url}")
    private String dbUrl;

    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl(dbUrl);
        return ds;
    }
}

@ConfigurationProperties

Java
@ConfigurationProperties(prefix = "database")
public class DatabaseProperties {
    private String url;
    private String username;
    private String password;
    // getters and setters
}

@Configuration
@EnableConfigurationProperties(DatabaseProperties.class)
public class DatabaseConfig {

    @Bean
    public DataSource dataSource(DatabaseProperties props) {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl(props.getUrl());
        ds.setUsername(props.getUsername());
        ds.setPassword(props.getPassword());
        return ds;
    }
}

启动Java配置

Java
public class Main {
    public static void main(String[] args) {
        // 使用AnnotationConfigApplicationContext
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        UserService userService = context.getBean(UserService.class);
    }
}

// 或通过Spring Boot
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Java配置 vs XML配置

特性Java配置XML配置
类型安全
IDE支持✅ 重构友好一般
配置位置代码中外部文件
修改影响需重新编译无需编译
表达力强(可编程)有限

要点总结

  1. @Configuration标识配置类,@Bean定义Bean
  2. Java配置类型安全,IDE支持好,便于重构
  3. @Import可导入其他配置类
  4. @Scope/@Lazy/@Primary等注解配置Bean属性
  5. @ConfigurationProperties支持类型安全的属性绑定

📝 发现内容有误?点击此处直接编辑

← 上一篇 依赖注入
下一篇 → XML配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库