akullpp/awesome-java

Add Avaje libraries

SentryMan opened this issue · 2 comments

I found this set of libraries created by @rbygrave (the creator of ebean orm) a while ago, and think they are criminally underrated.

  • Avaje Inject - Microservice-focused compile-time injection framework without reflection. Includes lifecycle support, AOP, and component testing.

Inject is basically dagger if dagger decided to be like spring. It's a tiny lib (~74kb) that uses the power of annotation processing to generate DI classes. What distinguishes it from dagger is its focus on server-side development. It adds lifecycle support, conditional beans, component testing and AOP. You can see it's comparison to spring DI here.

  • Avaje Jsonb - Fast, reflection-free Json binding with jackson-like annotations via apt source code generation.

Avaje Jsonb uses annotation processing to generate and register custom Json Adapters for every POJO annotated with Jackson-like annotations. Due to its total reliance on annotation processing, this lib is free from any reflection, giving it some decent benchmarks (TL:DR the benchmarks seems to suggest avaje is the 2nd fastest Json lib in most cases ran)

  • Avaje Http Client - A wrapper on JDK 11's HttpClient that adds authentication and other enhancements. Includes support for defining client APIs similar to JAX-RS, Retrofit and Feign. Uses annotation processing to generate client API implementations.

As the description says, it is a wrapper library for the JDK http client that adds various enhancements, like retries, authentication and json mapping using jackson/gson/avaje-jsonb. It also ability to create feign-like interfaces through annotation processing. (You can begin to see a theme here)

  • Avaje Http Server - Generates Lightweight JAX-RS style http servers using Javalin or Helidon/Nima SE. Use annotations like @path, @get, to define a rest api.

This library uses java annotation processing to adapt annotated rest controllers with (@path, @get, @post etc) to Javalin, Helidon SE, and Helidon Nima SE. The generated adapter classes that can be used with any JSR-330 compliant DI library to make working with these microframeworks easier.

  • avaje config - Loads yaml and properties files, supports dynamic configuration, plugins, file-watching and config event listeners.

This is the only one in the set that doesn't use annotation processing in some way. It's a static configuration library that can dynamically load/watch configuration files, and can evaluate missing properties from JVM args, System.env, System.properties and other properties using ${ }.

Pull request ;-)

Pull request ;-)

I've... already got one?