Bean Java配置


Spring 系列教程


前面介绍了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,可以通过:

  1. 给一个方法加@Bean注解
  2. 方法返回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);
原文地址:https://www.cnblogs.com/jinbuqi/p/10983465.html