spring配置方式

1 xml配置

通过xml文件配置,主要是就是配置bean,指定参数值。

2 注解配置

需要在main方法中指定配置文件,下面就是用AnnotationConfigApplicationContext加载配置文件,然后启动。其他配置类需要学习一下

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(DiConfig.class);

        UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);

        System.out.println(useFunctionService.SayHello("world"));

        context.close();
    }
}

在配置文件里面,
用@Configuration表明自己是配置文件,这个一定要记住,要特别熟悉。

@ComponentScan,用来指定扫描哪个目录的bean对象

@Configuration
@ComponentScan("com.wisely.highlight_spring4.ch1.di") // 这种扫描是配合注解配置用的
public class DiConfig {

}

3 代码配置

通过@Bean注解的方式,参数的设置都通过Java指定,主要是set方法指定。springboot中很多。

没用@ComponentScan,也就是说这个注解的功能是能够和一段代码互相替换的。
这种方式也很常见,要注意。

@Configuration // 这里不用@ComponentScan,不用注解配置,用java配置
public class JavaConfig {
    @Bean
    public FunctionService functionService() {
        return new FunctionService();
    }

    @Bean
    public UseFunctionService useFunctionService() {
        UseFunctionService useFunctionService = new UseFunctionService();
        useFunctionService.setFunctionService(functionService()); // 注入方式1,构造器注入
        return useFunctionService;

    }

//  @Bean
    // 注入方式2,如果某个Bean已经在容器中,可以作为参数放入另一个Bean的声明方法中
//  public UseFunctionService useFunctionService(FunctionService functionService){
//      UseFunctionService useFunctionService = new UseFunctionService();
//      useFunctionService.setFunctionService(functionService);
//      return useFunctionService;
//  }
}

具体到bean类里面,就不用@Service那几个注解了。所以原来扫描注解加标记bean的注解都被代码替代了
@Autowire注解也被代码替换了

// 这里没有加注解
public class FunctionService {

    public String sayHello(String word) {
        return "Hello " + word + " !";
    }
}

关于web开发时候,视图解析器的配置,在jsp情况下:

spring配置方式_第1张图片
image.png

4 yml配置

关于web开发时候,视图解析器的配置,在jsp情况下:

springboot通过yml,大大化简前几种。

spring配置方式_第2张图片
image.png

下面是默认配置的实现

spring配置方式_第3张图片
image.png

5 总结对比

spring配置方式_第4张图片
image.png

应用的基本配置(如数据库配置)用xml,业务配置用注解。

基本不变的用java方式,需要根据环境、业务改变的放到yml中

Java配置让你更理解你配置的Bean

全局配置使用Java配置(如数据库相关配置、MVC相关配置),业务Bean的配置使用注解配置(@Service、@Component、@Repository、@Controller)

java方式,配置写在代码里面更加直观,简单(有的配置 spring boot 自己已经做了),使用链式编程。

因为spring里面有很多配置其实一旦配置完成就不会去改变了,而且也没必要改变,例如大多数bean的依赖关系。把这些不会改变的配置都放在xml里面是没有意义的,只是会让配置越来越大,spring 3.x的时候就被诟病配置太多,已经变成了基于配置编程了,本末倒置了,所以把这些近乎静态的配置放在代码里面其实更好。

XML更方便修改,而且无需编译即可生效,所以把那些需要根据环境,业务改变的配置放在XML里面更好。

Spring Boot吸收了Rails的配置基于约定的方式,使得配置减少了很多,不过如果不熟悉它的底层是怎么配置的话,可能会遇到很多问题。

Spring时代前的Java配置是命令式的(一路写下来,依赖执行顺序),改成了XML声明式,到了Spring Boot时代,又实现了声明式的Java配置(分散在多个被注解的方法中,不依赖执行顺序)。

另外很多配置可以用application.properties覆盖,早该这样嘛!

spring的发展,采用了约定优于配置的原则。

1.xml中维护bean之间的依赖关系,随着业务逻辑的增长变得臃肿。

2.在.java中的配置效率是没有xml效率高的。

你可能感兴趣的:(spring配置方式)