Spring/Springboot——JavaConfig

1、认识JavaConfig

JavaConfig是Spring的一个子项目,在Spring4之后成为一个核心功能

JavaConfig中使用的注解:

  • @Configuration

    在类上打上这一标签,表示这个类是配置类

  • @ComponentScan

    相当于xml的

    <context:componentscan basepakage=""/>
    
  • @Import(MyConfig2.class)

    导入其他的配置类,合并配置信息,相当于xml中的

    <import resource="xxx.xml"/>
    
  • @Bean

    bean的定义,相当于xml的

    <bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> 
    
  • @EnableWebMvc

    相当于xml的

    <mvc:annotation-driven/>
    
  • @ImportResource

    相当于xml的

    <import resource="applicationContext-cache.xml"/>
    
  • @PropertySource

    spring 3.1开始引入,它是基于java config的注解,用于读取properties文件

  • @Profile

    spring3.1开始引入,一般用于多环境配置,

    激活时可用@ActiveProfiles注解,@ActiveProfiles("dev")

    等同于xml配置

<beans profile="dev">
    <bean id="beanname" class="com.pz.demo.ProductRPC"/>
</beans>

<!--激活该profile spring.profiles.active,也可设置默认值 spring.profiles.default-->
<context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>dev</param-value>
</context-param>

XML配置唯一的问题是,只有在运行时环境时你才能发现各种配置及语法错误,但是如果使用JavaConfig的方式的话,它会在编码时提示这些问题。

JavaConfig类能互相import合并配置或是继承并重写其中的Bean方法。

这种Java配置类的方式就不需要使用Spring的xml配置了, 全部由Java类+注解的方式实现,实现如下:

实体类:

@Component  //注入bean
public class User {
    private String name;

    public String getName() {
        return name;
    }

    @Value("ps")    //属性值注入
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

配置类:

@Configuration  //Configuration代表这是一个配置类,就如applicationContext.xml
@ComponentScan("com.spong.pojo")  //扫描指定包下的使用注解注入的类
@Import(MyConfig2.class)  //导入其他的配置类,配置信息合并
public class MyConfig {

    //注册一个bean,相当于xml中的bean标签
    //方法名就相当于bean中的id
    //返回值就相当于bean中的class
    @Bean
    public User getUser(){
        return new User();  //返回要注入到bean的对象
    }
}

测试类:

public class MyTest {
    public static void main(String[] args) {
        //如果完全使用了配置类配置,就只能通过AnnotationConfig的上下文对象获取容器,通过配置类的class对象来加载bean
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        User user =  context.getBean("getUser",User.class);
        System.out.println(user);
    }
}

注意:在Web环境中,需要在web.xml中加入如下代码:

<context-param>  
    <param-name>contextClass</param-name>  
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>  
</context-param>  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>com.packtpub.learnvaadin.springintegration.SpringIntegrationConfiguration</param-value>  
</context-param> 

如有错误,欢迎大佬指正!

posted @ 2020-08-11 15:24  想拥有两颗❤  阅读(395)  评论(0编辑  收藏  举报