使用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

  1. 编写一个实体类

    @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;
        }
    }
    
  2. 新建一个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>
    
  3. 测试

    @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中还会大量看到,我们需要知道这些注解的作用即可!

(0)

相关推荐