1. 程式人生 > >Spring之條件註解@Conditional,條件(系統)不同注入的物件也不同。

Spring之條件註解@Conditional,條件(系統)不同注入的物件也不同。

條件註解,可以根據不同的條件來做出不同的事情。在Spring中條件註解可以說是設計模式中狀態模式的一種體現方式,同時也是面向物件程式設計中多型的應用部分。

在Spring框架中,當我們使用條件註解時,我們會為每種獨立的條件建立一個類,根據這個類對應的條件的成立情況我們來選擇不同的任務來執行。當然我們在宣告任務時,一般使用介面來宣告。因為我們會在Spring的配置類中指定具體條件下的具體類。接下來,我們將來看一下Spring框架中@Conditional註解的具體使用方式。

本次演示,我們將根據作業系統的不同,尋找對應系統的Tomcat的儲存目錄,並執行Tomcat的啟動操作。

windows環境:win10系統,Tomcat目錄地址:D:\apache-tomcat-7.0.78\bin;
Linux環境:Ubuntu14系統,Tomcat目錄地址:/myweb/apache-tomcat-9.0.0.M26/bin;

1、建立常量類ConfigUtil,以便常量的管理。

這裡寫圖片描述

2、建立對應的Service介面TomcatService。

這裡寫圖片描述

3、建立Service介面的不同實現類WindowsTomcatServiceImpl、LinuxTomcatServiceImpl;

這裡寫圖片描述

這裡寫圖片描述

4、建立完Service介面及其實現類後,需要建立@Conditional註解所需的條件類。每個條件類對應著一種獨立的情況,在Spring中的條件類需要實現Condition介面。下方是我們建立的兩個條件類WindowsCondition、LinuxCondition。

這裡寫圖片描述

這裡寫圖片描述

5、Service的介面、Service的類以及相應的條件建立完畢後,接下來我們就該在Java的配置類中將條件類與Service類物件進行關聯了。

這裡寫圖片描述

6、測試,使用main方法測試。

這裡寫圖片描述

最終打印出我們在windows下的執行結果

這裡寫圖片描述

7、使用Runtime執行Tomcat的啟動或停止命令(專案已通過Spring boot搭建為web專案,可通過路徑訪問執行操作,已忽略test測試)。

這裡寫圖片描述

這裡寫圖片描述

8、完整的程式碼Demo

注意

在執行時,需要將Tomcat的如果發現沒有啟動Tomcat,並且控制檯列印如下資訊:

這裡寫圖片描述

這時我們需要將CATALINA_HOME配置到環境變數中。

這裡寫圖片描述

相關推薦

Spring條件註解@Conditional條件系統不同注入物件不同

條件註解,可以根據不同的條件來做出不同的事情。在Spring中條件註解可以說是設計模式中狀態模式的一種體現方式,同時也是面向物件程式設計中多型的應用部分。 在Spring框架中,當我們使用條件註解時,我們會為每種獨立的條件建立一個類,根據這個類對應的條件的成立

spring通過註解方式配置Bean

(1)元件掃描:spring能夠從classpath下自動掃描、偵測和例項化具有特定註解的元件。 (2)特定元件包括: @Component:基本註解,標識一個受spring管理的元件; @Respority:標識持久層元件; @Service:標識服務層(業務層)元件; @Controller:標識表現層

Jquery小技巧多參傳遞後臺controller用一物件接收

當jQuery 傳送ajax請求需要傳遞多個引數時,如果引數過多,Controller接收引數時就需要定義多個引數,這樣介面方法會比較長,也不方便。Spring可以傳遞物件引數,將你需要的所有查詢條件定義成物件的屬性,前臺給物件賦值,後臺Controller接收時只需要接收

Spring通過註解管理控制反轉IOC注入DI

spring中的註解用法 1.註解的依賴注入di 在spring的xml中用 <property name="" ref=""> <!-- setter方式注入--> <constructor index="" ref=""/&

.NET多線程線程安全Lock、Monitor同步訪問、LazyInitializer延遲初始化、Interlocked原子操作、static靜態構造函數、volatile、

called val www. queue 多線程 try 退出 con 內存 1、什麽是線程安全    線程安全是編程中的術語,指某個函數、函數庫在多線程環境中被調用時,能夠正確地處理多個線程之間的共享變量,使程序功能正確完成。一般來說,線程安全的函數應該為每個調用它的

Spring Boot實戰筆記-- Spring高級話題條件註解@Conditional

cat property sts 配置 fig 構造 註解 方法 code 一、條件註解@Conditional   在之前的學習中,通過活動的profile,我們可以獲得不同的Bean。Spring4提供了一個更通用的基於條件的Bean的創建,即使用@Conditiona

SpringBoot4-spring高階話題-spring aware多執行緒計劃任務條件註解@Conditional

一:Spring Aware 1,點睛      spring的依賴注入的最大亮點就是你所有的Bean對Spring容器的存在是沒有意識的,即你可以將你的容器替換成別的容器,如Google Guice,這時Bean之間的耦合度很低。     但是在實際專案中,你不可避免的要

Spring_總結_04_高級配置(二)條件註解@Conditional

fin 路徑 class annotate over inf clas wid onclick 一、前言 本文承接上一節:Spring_總結_04_高級配置(一)之Profile 在上一節,我們了解到 Profile 為不同環境下使用不同的配置提供了支持,那麽Profi

spring boot條件註解@Conditional

public class WindowsCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

Spring條件註解@Conditional

@Conditional是Spring4新提供的註解,它的作用是根據某個條件建立特定的Bean,通過實現Condition介面,並重寫matches介面來構造判斷條件。總的來說,就是根據特定條件來控制Bean的建立行為,這樣我們可以利用這個特性進行一些自動的配置。   本文將分為三大部分,@Cond

spring-boot-2.0.3不一樣系列源碼篇 - run方法createApplicationContext絕對有值得你看的地方

處理 gen 利用反射 mva 默認 .get war close -s 前言   此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可以挑些自己感興趣或者對自己有

spring-boot-2.0.3不一樣系列源碼篇 - run方法prepareContext絕對有值得你看的地方

release led 設置 get handler htm encoding 列表創建 splay 前言   此系列是針對springboot的啟動,旨在於和大家一起來看看springboot啟動的過程中到底做了一些什麽事。如果大家對springboot的源碼有所研究,可

SpringBoot條件註解@Conditional

最近專案中使用到了關於@Conditional註解的一些特性,故寫此文記錄一下 @Conditional是啥呀? @Conditional註解是個什麼東西呢,它可以根據程式碼中設定的條件裝載不同的bean,比如說當一個介面有兩個實現類時,我們要把這個介面交給Spring管理

併發並行同步非同步同步鎖遞迴鎖同步條件(event)訊號量(Semaphore)佇列queue,生產者消費者

併發&並行 併發:是指系統具有處理 多個任務(動作)的能力(分著切換進行)。一個cpu就能實現併發,一邊聽歌一邊打遊戲 並行:是指系統具有同時處理 多個任務(唯一的時刻,同一時刻)。多核(4核處理4個任務) 並行是併發的子集 同步&非同步 同步:

4.7 基於Spring註解的定時任務@Schedule > 我的程式猿路:第三十七章

Cron表示式是一個字串,字串以5或6個空格隔開,分為6或7個域,每一個域代表一個含義,Cron有如下兩種語法格式:  Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month

shell中條件測試常用的語法

shell中條件測試常用的語法     shell   bashshell中條件測試常用的語法(一)執行條件測試表達式後通常會返回“真”或“假”,就像執行命令後的返回值為0表示真,非0表示假一樣。在bash編程裏,條件測試常用的語法形式如下:說明:(1)語法1與語法2是等價的,

從零一起學Spring BootLayIM項目長成記 初見 Spring Boot

部分 基礎 依賴 com stat boot.s 情況下 比較 tar 項目背景   之前寫過LayIM的.NET版後端實現,後來又寫過一版Java的。當時用的是servlet,websocket和jdbc。雖然時間過去很久了,但是仍有些同學在關註。偶然間我聽說了Sprin

從零一起學Spring BootLayIM項目長成記單聊群聊的實現

href 宣傳 net 放棄 blog 群聊 項目 get 實現 文章傳送門:   https://my.oschina.net/panzi1/blog/1577007 並沒有放棄博客園,只是 t-io 在 oschina發展。用了人家的框架,也得幫人家做做宣傳是吧~~從零

Expo大作戰(三十三)--expo sdk apiMapView地圖MailComposer磁力傳感計Lottie動畫

填充 標記 android commit anim subject conf 項目 cancel 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全