javascript
java spring 条件注解_【Spring】Spring高级话题-条件注解-@Condition
進(jìn)行本示例的演示,需要先配置好Maven和Spring哦、
見:
【Spring】基于IntelliJ IDEA搭建Maven
分析
通過profile,我們可以獲得不同的profile,我們可以獲得不同的Bean。Spring4提供了一個(gè)更通用的基于條件的Bean的創(chuàng)建,即使用@Condition注解。
@Condition根據(jù)滿足某一個(gè)特定條件創(chuàng)建一個(gè)特定的Bean。
比如說,當(dāng)某一個(gè)jar包在一個(gè)類路徑下的時(shí)候,自動(dòng)配置一個(gè)或多個(gè)Bean;或者只有某個(gè)Bean被創(chuàng)建才會創(chuàng)建另外一個(gè)Bean。
總的來說,就是根據(jù)特定條件來控制Bean的創(chuàng)建行為,這樣我們可以利用這個(gè)特性來進(jìn)行一些自動(dòng)的配置。
下面這個(gè)示例將以不同的操作系統(tǒng)來作為條件,通過實(shí)現(xiàn)Condition接口,并重寫其matches方法來構(gòu)造判斷條件。
若在Windows系統(tǒng)下運(yùn)行程序,則輸出列表命令為dir;若在Linux操作系統(tǒng)下運(yùn)行程序,則輸出列表命令為ls。
示例
先需要定義判斷條件
判定Windows的條件
package cn.hncu.p3.p4_conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:24. * Explain:判斷Windows的條件 */
public class WindowsCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){
return context.getEnvironment().getProperty("os.name").contains("Windows");
}
}
判定Linux的條件
package cn.hncu.p3.p4_conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:28. * Explain:判定Linux的條件 */
public class LinuxCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux");
}
}
不同系統(tǒng)下Bean的類
首先需要一個(gè)接口,接下來不同的Bean都需要實(shí)現(xiàn)這個(gè)接口。
接口
package cn.hncu.p3.p4_conditional;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:31. * Explain:接口-Bean需要實(shí)現(xiàn)的接口 */
public interface ListService {
public String showListCmd();
}
Windows下所要?jiǎng)?chuàng)建的Bean的類
package cn.hncu.p3.p4_conditional;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:41. * Explain:Windows下所要?jiǎng)?chuàng)建的Bean的類 */
public class WindowsListService implements ListService {
@Override
public String showListCmd() {
return "dir";
}
}
Linux下所要?jiǎng)?chuàng)建的Bean的類
package cn.hncu.p3.p4_conditional;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:42. * Explain:Linux下所要?jiǎng)?chuàng)建的Bean的類 */
public class LinuxListService implements ListService {
@Override
public String showListCmd() {
return "ls";
}
}
配置類
package cn.hncu.p3.p4_conditional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:48. * Explain:配置類 */
@Configuration
public class ConditionConfig {
//matches方法返回true的,就運(yùn)行哪個(gè)方法
@Bean
@Conditional(WindowsCondition.class)//通過@Condition注解,符合Windows條件則實(shí)例化windowsListService
public ListService windowsListService(){
return new WindowsListService();
}
@Bean
@Conditional(LinuxCondition.class)//通過@Condition注解,符合Linux條件則實(shí)例化linuxListService
public ListService linuxListService(){
return new LinuxListService();
}
}
運(yùn)行
package cn.hncu.p3.p4_conditional;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/** * Created with IntelliJ IDEA. * User: 陳浩翔. * Date: 2016/12/7. * Time: 下午 7:57. * Explain:運(yùn)行類 */
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
ListService listService = context.getBean(ListService.class);
System.out.println(context.getEnvironment().getProperty("os.name")
+"系統(tǒng)下的列表命令為:"
+listService.showListCmd()
);
}
}
運(yùn)行結(jié)果
本文章由[諳憶]編寫, 所有權(quán)利保留。
總結(jié)
以上是生活随笔為你收集整理的java spring 条件注解_【Spring】Spring高级话题-条件注解-@Condition的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wd2003计算机考试,2015计算机一
- 下一篇: 码这么多字只为搞懂如何在Python和J