Syringe is a dependency injection and configuration library from AVAST Software available for Java and Scala projects. More information can be found in the wiki.
import com.avast.syringe.config.{ConfigProperty, ConfigBean}
@ConfigBean
class ComponentX {
@ConfigProperty
var compY: ComponentY = _
}
@ConfigBean
class ComponentY {
@ConfigProperty
var message: String = _
}
MyModule
(aka palette) is generated via Syringe Maven Plugin.
There can be many traits (aka perspectives) which can inherit from each other and override specific components.
trait Perspective extends MyModule {
lazy val msg = "Hello World!"
override def newComponentX = super
.newComponentX
.compY(componentY)
override def newComponentY = super
.newComponentY
.message(msg)
}
object MyApp extends Perspective {
override def main(args: Array[String]) {
// build the top-level component - recursively builds everything
val compX = componentX.build
println(compX.compY.message)
}
}
To get started you need to setup your Maven POM as indicated below. Using mvn clean
and mvn package
you can
regenerate your palette (module) - there are two automatically enabled Maven profiles for that
(generate-palette
and build-perspectives
). However, to build the entire project you need to run mvn package
twice -
first the palette is generated and second the palette is compiled.
<dependencies>
<dependency>
<groupId>com.avast</groupId>
<artifactId>syringe_2.10</artifactId>
<version>1.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<configuration>
<filesets>
<fileset>
<directory>src/main/syringe</directory>
<includes>
<include>**/MyModule.scala</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>generate-palette</id>
<activation>
<file>
<missing>src/main/syringe/com/avast/MyModule.scala</missing>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.avast</groupId>
<artifactId>syringe-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>generate-module</id>
<goals>
<goal>generate-module</goal>
</goals>
<configuration>
<modulePackage>com.avast</modulePackage>
<moduleName>MyModule</moduleName>
<moduleDesc>Module description</moduleDesc>
<generatedClassesDirectory>src/main/syringe</generatedClassesDirectory>
<builderTraits>
<property>
<name>com\.avast\..*</name>
<value>com.avast.syringe.config.perspective.JMXRegistry</value>
</property>
</builderTraits>
</configuration>
</execution>
<execution>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>build-perspectives</id>
<activation>
<file>
<exists>src/main/syringe/com/avast/MyModule.scala</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>