现在说一下,通过 Java 代码将 Bean 注册到 Spring 容器中。

java 配置这种方法在 Spring Boot 出现之前,其实很少使用,自从有了Spring boot,Java配置开发被广泛使用,因为在 Spring Boot 中,不使用一行 XML 配置。

假如我有如下一个 Bean:

public class SayHello {
  public String sayHello(String name){
    return "hello" + name;
  }
}

在 Java 配置中,我们用一个 Java 配置类去代替之前的 applicationContext.xml 文件

首先在配置类上添加一个 @Configuration 注解,这个注解表示这个类不是一个普通类,而是一个配置类,它的作用相当于 applicationContext.xml。然后定义方法,方法返回对象,方法上添加 @Bean 注解,表示将这个方法的返回值注入到 Spring 容器中去。也就是说,@Bean 所对应的方法,就相当于applicationContext.xml 中的 bean 节点。

@Configuration
public class JavaConfig {
    @Bean
    SayHello sayHello(){
        return new SayHello();
    }
}

既然是配置类,我们需要在项目启动时加载配置类。

public class TestJavaConfig {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);

        SayHello hello = context.getBean("sayHello", SayHello.class);
        System.out.println(hello.sayHello("ysmc"));
    }

}

注意

配置的加载,是使用AnnotationConfigApplicationContext 来实现。

关于 Java 配置,这里有一个需要注意的问题:Bean 的名字是什么?

Bean 的默认名称是方法名。以上面的案例为例,Bean 的名字是 sayHello。如果开发者想自定义Bean 的名字,也是可以的。直接在 Bean 注解中进行配置。如下配置表示修改 Bean 的名字为 javaboy

@Configuration
public class JavaConfig {
    @Bean("javaboy")
    SayHello sayHello(){
        return new SayHello();
    }
}