我們之前使用的Spring的XMl配置創(chuàng)建管理Bean,但Spring支持Java方式實(shí)現(xiàn)這個(gè)功能!
JavaConfig 原來是 Spring 的一個(gè)子項(xiàng)目,它通過 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 是元注解,它有很多其他的注解實(shí)現(xiàn),有一個(gè)就是@Component ,說明它也會(huì)被Spring容器托管,注冊(cè)到容器中。
@Configuration 代表這是一個(gè)配置類,就和Spring的applicationContext.xml一樣
1、創(chuàng)建Bean
-
編寫一個(gè)實(shí)體類
@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;
}
}
-
新建一個(gè)config包,編寫一個(gè)AppConfig類
@Configuration // @Configuration表示這是一個(gè)配置類
public class AppConfig {
// 通過方法注冊(cè)一個(gè)bean。
// 方法的返回值就Bean的類型,方法名就是bean的id!
@Bean
public User getUser(){
return new User(); // 返回要注入到Bean的對(duì)象
}
}
上面的getUser()方法就相當(dāng)于XML的
<beans>
<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
-
測(cè)試
@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、導(dǎo)入其他配置類
@Configuration
@Import({WebConfig.class})
public class AppConfig {
//bean definition...
}
它就相當(dāng)于
<beans>
<import resource="WebConfig.xml"/>
</beans>
2.2、配置包注解掃描
@Configuration
@ComponentScan("com.acme.app.services")
public class AppConfig {
// various @Bean definitions ...
}
它就相當(dāng)于
<context:component-scan base-package="com.acme.app.services"/>
2.3、其他詳細(xì)配置
關(guān)于javaConfig的方式,詳情請(qǐng)見這篇博客:使用JavaConfig形式配置Spring框架,了解一下
關(guān)于這種Java類的配置方式,我們?cè)谥蟮腟pringBoot 和 SpringCloud中還會(huì)大量看到,我們需要知道這些注解的作用即可!
|