我們之前使用的Spring的XMl配置創(chuàng)建管理Bean,但Spring支持Java方式實現(xiàn)這個功能!
JavaConfig 原來是 Spring 的一個子項目,它通過 Java 類的方式提供 Bean 的定義信息,在Spring4之后的版本, JavaConfig已正式成為Spring的核心功能 。

JavaConfig的核心注解@Configuration ,它的源碼如下
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(annotation = Component.class)
String value() default "";
boolean proxyBeanMethods() default true;
}
通過源碼我們可以看出:
@Configuration 是元注解,它有很多其他的注解實現(xiàn),有一個就是@Component ,說明它也會被Spring容器托管,注冊到容器中。
@Configuration 代表這是一個配置類,就和Spring的applicationContext.xml一樣
1、創(chuàng)建Bean
-
編寫一個實體類
@Component // 添加@Component注解,交給Spring托管
public class User {
private String name;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
-
新建一個config包,編寫一個AppConfig類
@Configuration // @Configuration表示這是一個配置類
public class AppConfig {
// 通過方法注冊一個bean。
// 方法的返回值就Bean的類型,方法名就是bean的id!
@Bean
public User getUser(){
return new User(); // 返回要注入到Bean的對象
}
}
上面的getUser()方法就相當于XML的
<beans>
<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
-
測試
@Test
public void test01() throws Exception{
// 使用AnnotationConfigApplicationContext獲取容器
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
User user = context.getBean("getUser");
System.out.println(user);
}
2、其他配置
2.1、導入其他配置類
@Configuration
@Import({WebConfig.class})
public class AppConfig {
//bean definition...
}
它就相當于
<beans>
<import resource="WebConfig.xml"/>
</beans>
2.2、配置包注解掃描
@Configuration
@ComponentScan("com.acme.app.services")
public class AppConfig {
// various @Bean definitions ...
}
它就相當于
<context:component-scan base-package="com.acme.app.services"/>
2.3、其他詳細配置
關于javaConfig的方式,詳情請見這篇博客:使用JavaConfig形式配置Spring框架,了解一下
關于這種Java類的配置方式,我們在之后的SpringBoot 和 SpringCloud中還會大量看到,我們需要知道這些注解的作用即可!
|