Quarkus中的依赖注入DI和面向切面aop编程
前言
做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#introduction
jsr 365:java 2.0的上下文和依赖注规范
该规范定义了一组功能强大的补充服务,这些服务有助于改善应用程序代码的结构。
- 绑定到生命周期上下文的有状态对象的定义良好的生命周期,其中上下文集是可扩展的
- 复杂的类型安全的依赖项注入机制,包括在开发或部署时选择依赖项的能力,而无需进行冗长的配置
- 支持java ee模块化和java ee组件体系结构-解决java ee组件之间的依赖关系时要考虑java ee应用程序的模块化结构
- 与统一表达语言(el)集成,允许在jsf或jsp页面中直接使用任何上下文对象
- 装饰注入对象的能力
- 通过类型安全的拦截器绑定将拦截器与对象相关联的能力
- 一个事件通知模型
- 除了java servlets规范定义的三个标准web上下文之外的web 对话上下文
- 允许便携式扩展与容器完美集成的spi
通俗的说,jsr365是一套java实现di依赖注入功能的接口设计,具体的框架只要实现这条接口,就可以正常的提供依赖注入功能,quarkus就是实现的这套api,但是没有完全实现,所有只有部分功能。这里不研究具体的规范协议,内容太多了,有兴趣的可以在上面的地址中翻阅,下面主要看看在quarkus中,怎么使用的。
bean声明和依赖注入
在quarkus中,可以使用@dependent,@applicationscoped,@singleton,@requestscoped和@sessionscoped等cdi中定义的注解去声明一个bean对象,支持 @inject注解和构造函数注入一个bean。默认情况下,本声明的bean都是延迟加载的,在应用第一次接收请求时才会初始化这个bean,如果需要在应用程序启动时就加载bean,需要在bean上添加如下注解:
bean的生命周期
条件化初始bean
如上,只有在配置文件中显示的配置quarkus.bean1.enabled=true时,才会激活bean1的初始化
面向切面编程aop
quarkus中编写aop的程序和spring中类似,首先定义一个切点注解
然后编写切面类
编写切面类时,只需要在切面类上将自定义的注解标注在类上即可,然后使用@aroundinvoke注解标注方法,被拦截到方法时,方法调用信息会自动注入到invocationcontext中。quarkus中的aop没有spring中那么多的概念,只有环绕通知的使用方式。使用时,将自定义的注解标注在类或者方法上即可
bean列表接口
quarkus在本地开发时,会自动注册http get- /quarkus/arc/beans接口,返回所有bean的列表
结语
以上,是quarkus中依赖注入和面向切面的基本使用方式和技巧,虽然没有spring的功能那么多那么细分。但是基本的功能都已具备了
以上就是quarkus中的依赖注入di和面向切面aop编程的详细内容,更多关于quarkus中di与aop编程的资料请关注其它相关文章!