@Configuration 和 @Bean 注解
帶有 @Configuration 的注解類表示這個類可以使用 Spring IoC 容器作為 bean 定義的來源。@Bean 注解告訴 Spring,一個帶有 @Bean 的注解方法將返回一個對象,該對象應該被注冊為在 Spring 應用程序上下文中的 bean。
例子如下:
HelloWorld.java
package com.how2java.w3cschool.baseonjava; public class HelloWorld { private String message; public void getMessage() { System.out.println("Your message is:" + message); } public void setMessage(String message) { this.message = message; } }
HelloWorldConfig.java
package com.how2java.w3cschool.baseonjava; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /* * 帶有 @Configuration 的注解類表示這個類可以使用 Spring IoC 容器作為 bean 定義的來源。 * @Bean 注解告訴 Spring,一個帶有 @Bean 的注解方法將返回一個對象,該對象應該被注冊為在 Spring 應用程序上下文中的 bean。 */ @Configuration public class HelloWorldConfig { // 帶有 @Bean 注解的方法名稱作為 bean 的 ID,它創建並返回實際的 bean。也就是此時的bean // id為helloWorld,你的配置類可以聲明多個 @Bean。 // 一旦定義了配置類,你就可以使用 AnnotationConfigApplicationContext 來加載並把他們提供給 Spring 容器
@Bean public HelloWorld helloWorld() { return new HelloWorld(); } }
MainApp.java
package com.how2java.w3cschool.baseonjava; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; 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(); } }
如果在HelloWorldConfig.java中忘了@Bean的注解,將會遇到以下的錯誤
“No unique bean of type [com.how2java.w3cschool.baseonjava.HelloWorld] is defined: expected single bean but found 0: ”
例子源於:W3Cschool,在此作記錄
