前面已经学习如何使用 XML 配置文件来配置 Spring bean。
基于 Java 的配置可以达到基于XML配置的相同效果。
基于 Java 的配置选项,可以使你在不用配置 XML 的情况下编写大多数的 Spring
@Configuration 和 @Bean 注解
带有 @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。
@Bean 注解告诉 Spring,一个带有 @Bean 的注解方法将返回一个对象,该对象应该被注册为在 Spring 应用程序上下文中的 bean。
最简单可行的 @Configuration 类如下所示:
package hello;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
上面的代码将等同于下面的 XML 配置:
<beans>
<bean id="helloWorld" class="hello.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();
}
一个例子
-
新建Spring项目
-
创建 Java 类 HelloWorldConfig、HelloWorld 和 MainApp
这里是 HelloWorldConfig.java 文件的内容:
package hello;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
这里是 HelloWorld.java 文件的内容:
package hello;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
System.out.println("the Message : " + message);
return message;
}
}
下面是 MainApp.java 文件的内容:
package hello;
//import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.ApplicationContext;
//import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.annotation.*;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld obj = context.getBean(HelloWorld.class);
obj.setMessage("你好");
obj.getMessage();
}
}
运行结果
the Message : 你好
每天学习一点点,每天进步一点点。