我只是试着理解注释@Bean的含义和用法,我遇到了一个名为 JavaConfig in this文档的单词(2.2.1。chapter)。背景如下:
要声明bean,只需使用@Bean批注注释方法即可。当 JavaConfig 遇到这样的方法时,它将执行该方法并注册(...)
我不明白什么是 JavaConfig 是Spring ... 它究竟起作用了什么? 什么时候运行? 为什么要跑?
我也看到了this documentation,但没有让我更接近理解它。
答案 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!