通过@Profile条件装配
@Profile注解可以在激活不同的配置文件时,实现装配不同的类。
定义一个Calculate接口,提供sum方法;
public interface Calculate {Integer sum(Integer ...numbers);}
创建两个实现类Java7Calculate、Java8Calculate,分别通过Java7的for循环和Java8的lambda方式实现sum方法;
在Java7Calculate上添加注解@Profile(“Java7”);
@Profile("Java7")@Servicepublic class Java7Calculate implements Calculate {@Overridepublic Integer sum(Integer... numbers) {System.out.println("Java7 sum");int sum = 0;for (int i = 0; i < numbers.length; i++) {sum += numbers[i];}return sum;}}
在Java8Calculate上添加注解@Profile(“Java8”);
@Profile("Java8")@Servicepublic class Java8Calculate implements Calculate{@Overridepublic Integer sum(Integer... numbers) {System.out.println("Java8 sum");return Stream.of(numbers).reduce(0, Integer::sum);}}
创建启动类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(); } }运行结果如下图:

配置启动类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(); } }运行结果如下图:

