<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
做java開發的肯定清楚spring中的核心思想ioc和aop,ioc即控制反轉的意思,di的核心思想和ioc一樣,描述的也是同一個事情同一個思想,只是di的依賴注入更容易被理解了,aop即面向切面,如註解事務功能,就是基於aop的思想來實現的。Quarkus中也實現了一套非標準的cdi規範,下面就來看看Quarkus中的di和aop相關內容。
cdi規範協定:https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html
該規範定義了一組功能強大的補充服務,這些服務有助於改善應用程式程式碼的結構。
通俗的說,JSR365是一套java實現DI依賴注入功能的介面設計,具體的框架只要實現這條介面,就可以正常的提供依賴注入功能,Quarkus就是實現的這套api,但是沒有完全實現,所有隻有部分功能。這裡不研究具體的規範協定,內容太多了,有興趣的可以在上面的地址中翻閱,下面主要看看在Quarkus中,怎麼使用的。
/** * @author kl : http://kailing.pub * @version 1.0 * @date 2020/7/13 16:55 */ @ApplicationScoped public class TestBean { @Inject Bean1 bean1; } @ApplicationScoped class Bean1 { String ping() { return "Bean1"; } }
在Quarkus中,可以使用@Dependent,@ApplicationScoped,@Singleton,@RequestScoped和@SessionScoped等CDI中定義的註解去宣告一個Bean物件,支援 @Inject註解和建構函式注入一個Bean。預設情況下,本宣告的Bean都是延遲載入的,在應用第一次接收請求時才會初始化這個bean,如果需要在應用程式啟動時就載入Bean,需要在Bean上新增如下註解:
/** * @author kl : http://kailing.pub * @version 1.0 * @date 2020/7/13 16:55 */ @ApplicationScoped @Startup public class TestBean { @Inject Bean1 bean1; }
@ApplicationScoped @Startup public class TestBean { @Inject Bean1 bean1; @PostConstruct private void init(){ System.out.println("範例化後呼叫"); } @PreDestroy private void pre(){ System.out.println("銷燬前呼叫"); } void startup(@Observes StartupEvent event) { System.out.println("應用啟動後呼叫"); } void stop(@Observes ShutdownEvent event) { System.out.println("應用關閉後呼叫"); } }
/** * @author kl : http://kailing.pub * @version 1.0 * @date 2020/7/13 16:55 */ @ApplicationScoped @Startup public class TestBean { @Inject Bean1 bean1; } @Dependent class BeanConfig{ @Produces @IfBuildProperty(name = "quarkus.bean1.enabled", stringValue = "true") private Bean1 bean1(){ return new Bean1(); } } class Bean1 { String ping() { return "Bean1"; } }
如上,只有在組態檔中顯示的設定quarkus.bean1.enabled=true時,才會啟用Bean1的初始化
Quarkus中編寫aop的程式和spring中類似,首先定義一個切點註解
@Inherited @InterceptorBinding @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Logging { }
然後編寫切面類
@Logging @Interceptor class LogInterceptor { private final Logger logger = LoggerFactory.getLogger(getClass()); @AroundInvoke public Object logging(InvocationContext ic) throws Exception { logger.info("方法引數:{}", ic.getParameters().toString()); return ic.proceed(); } }
編寫切面類時,只需要在切面類上將自定義的註解標註在類上即可,然後使用@AroundInvoke註解標註方法,被攔截到方法時,方法呼叫資訊會自動注入到InvocationContext中。Quarkus中的aop沒有spring中那麼多的概念,只有環繞通知的使用方式。使用時,將自定義的註解標註在類或者方法上即可
Quarkus在本地開發時,會自動註冊HTTP GET- /quarkus/arc/beans介面,返回所有Bean的列表
以上,是Quarkus中依賴注入和麵向切面的基本使用方式和技巧,雖然沒有spring的功能那麼多那麼細分。但是基本的功能都已具備了
以上就是Quarkus中的依賴注入DI和麵向切面aop程式設計的詳細內容,更多關於Quarkus中DI與aop程式設計的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45