什么是Spring中的JavaConfig?

时间:2017-09-29 10:27:26

标签: java spring spring-mvc spring-java-config

我只是试着理解注释@Bean的含义和用法,我遇到了一个名为 JavaConfig in this文档的单词(2.2.1。chapter)。背景如下:

  

要声明bean,只需使用@Bean批注注释方法即可。当 JavaConfig 遇到这样的方法时,它将执行该方法并注册(...)

我不明白什么是 JavaConfig 是Spring ... 它究竟起作用了什么? 什么时候运行? 为什么要跑?

我也看到了this documentation,但没有让我更接近理解它。

2 个答案:

答案 0 :(得分:7)

它指的是基于注释的配置,而不是旧的原始基于XML的配置。

实际的JavaConfig组件是通过类文件和注释来构建配置的组件(而不是通过XML文件来构建配置)。

答案 1 :(得分:5)

使用@Configuration注释类表示Spring IoC容器可以将该类用作bean定义的源。 @Bean注释(您询问)告诉Spring,使用@Bean注释的方法将返回一个应该在Spring应用程序上下文中注册为bean的对象。最简单的@Configuration类如下 -

package com.test;
import org.springframework.context.annotation.*;

@Configuration
public class HelloWorldConfig {
   @Bean 
   public HelloWorld helloWorld(){
      return new HelloWorld();
   }
}

以上代码将等同于以下XML配置 -

<beans>
   <bean id = "helloWorld" class = "com.test.HelloWorld" />
</beans>

这里,方法名称注释为@Bean作为bean ID,它创建并返回实际的bean。您的配置类可以具有多个@Bean的声明。一旦定义了配置类,就可以使用AnnotationConfigApplicationContext加载并将它们提供给Spring容器,如下所示 -

public static void main(String[] args) {
   ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class);

   HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
   helloWorld.setMessage("Hello World!");
   helloWorld.getMessage();
}

您可以按如下方式加载各种配置类 -

public static void main(String[] args) {
   AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();

   ctx.register(AppConfig.class, OtherConfig.class);
   ctx.register(AdditionalConfig.class);
   ctx.refresh();

   MyService myService = ctx.getBean(MyService.class);
   myService.doStuff();
}

使用示例:

以下是HelloWorldConfig.java文件的内容

package com.test;
import org.springframework.context.annotation.*;

@Configuration
public class HelloWorldConfig {
   @Bean 
   public HelloWorld helloWorld(){
      return new HelloWorld();
   }
}

以下是HelloWorld.java文件的内容

package com.test;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

以下是MainApp.java文件的内容

package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext ctx = 
         new AnnotationConfigApplicationContext(HelloWorldConfig.class);

      HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
      helloWorld.setMessage("Hello World!");
      helloWorld.getMessage();
   }
}

完成所有源文件的创建并添加所需的其他库后,让我们运行该应用程序。您应该注意,不需要配置文件。如果您的应用程序一切正常,它将打印以下消息 -

Your Message : Hello World!