通过@Profile条件装配

@Profile注解可以在激活不同的配置文件时,实现装配不同的类。

  1. 定义一个Calculate接口,提供sum方法;

    1. public interface Calculate {
    2. Integer sum(Integer ...numbers);
    3. }
  2. 创建两个实现类Java7Calculate、Java8Calculate,分别通过Java7的for循环和Java8的lambda方式实现sum方法;

  3. 在Java7Calculate上添加注解@Profile(“Java7”);

    1. @Profile("Java7")
    2. @Service
    3. public class Java7Calculate implements Calculate {
    4. @Override
    5. public Integer sum(Integer... numbers) {
    6. System.out.println("Java7 sum");
    7. int sum = 0;
    8. for (int i = 0; i < numbers.length; i++) {
    9. sum += numbers[i];
    10. }
    11. return sum;
    12. }
    13. }
  4. 在Java8Calculate上添加注解@Profile(“Java8”);

    1. @Profile("Java8")
    2. @Service
    3. public class Java8Calculate implements Calculate{
    4. @Override
    5. public Integer sum(Integer... numbers) {
    6. System.out.println("Java8 sum");
    7. return Stream.of(numbers).reduce(0, Integer::sum);
    8. }
    9. }
  5. 创建启动类ProfileBootstrap,配置profiles为“Java7”;

    @ComponentScan(basePackages = "com.xxx")
    public class ProfileBootstrap {
     public static void main(String[] args) {
         ConfigurableApplicationContext context = new SpringApplicationBuilder(ProfileBootstrap.class)
                 .web(WebApplicationType.NONE)
                 .profiles("Java7")
                 .run(args);
         Calculate calculate = context.getBean(Calculate.class);
         Integer sum = calculate.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
         System.out.println("calculate.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)=" + sum);
         context.close();
     }
    }
    
  6. 运行结果如下图: image.png

  7. 配置启动类ProfileBootstrap的profiles为“Java8”;

    @ComponentScan(basePackages = "com.xxx")
    public class ProfileBootstrap {
     public static void main(String[] args) {
         ConfigurableApplicationContext context = new SpringApplicationBuilder(ProfileBootstrap.class)
                 .web(WebApplicationType.NONE)
                 .profiles("Java8")
                 .run(args);
         Calculate calculate = context.getBean(Calculate.class);
         Integer sum = calculate.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
         System.out.println("calculate.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)=" + sum);
         context.close();
     }
    }
    
  8. 运行结果如下图: image.png