@Profile
-
Spring爲我們提供的可以根據當前環境,動態的激活和切換一系列組件的功能
-
@Profile指定組件在哪個環境的情況下才能被註冊到容器中,不指定,任何環境下都能註冊這個組件
-
@Profile註解可以加在類上,也可以加載注入bean的方法上
-
@Profile註解用於實現通過修改運行時參數,切換不同的開發環境
下面模擬一下在不同環境下加載不同類的場景
我們有一個計算多個整數的方法的類
public interface CalculateService {
/**
* sum求和(多個整數)
*
* @param values
* @return 累計值
*/
Integer sum(Integer... values);
}
環境爲Java7時的實現
@Service
@Profile("Java7")
public class Java7CalcalateService implements CalculateService {
@Override
public Integer sum(Integer... values) {
System.out.println("java7 for循環實現");
Integer sum = 0;
for (Integer value : values) {
sum += value;
}
return sum;
}
}
環境爲Java8時的實現
@Service
@Profile("Java8")
public class Java8CalculateService implements CalculateService {
@Override
public Integer sum(Integer... values) {
System.out.println("java8 lambda實現");
int sum = Stream.of(values).reduce(0, Integer::sum);
return sum;
}
}
測試
@SpringBootApplication
public class Study01Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(Study01Application.class)
.web(WebApplicationType.NONE)
.profiles("Java7")
.run(args);
CalculateService calculateService = context.getBean(CalculateService.class);
System.out.println(calculateService.sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
}
}
通過指定不同的環境,可以發現控制檯打印對應版本的Service