使用Java方式配置Spring
我们之前使用的Spring的XMl配置创建管理Bean,但Spring支持Java方式实现这个功能!
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
是元注解,它有很多其他的注解实现,有一个就是@Component
,说明它也会被Spring容器托管,注册到容器中。
@Configuration
代表这是一个配置类,就和Spring的applicationContext.xml一样
1、创建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中还会大量看到,我们需要知道这些注解的作用即可!
懂不懂,都是收获