anchor.diff:  }
   ----
   
  +For more details see the paragraph about the xref:injector[Injector].
  +
  +== JSR330 Annotation Preprocessor
  +
  +JSR-330 support is provided by the module `winter-compiler`.
  +
  +The JSR330 annotation preprocessor generates components and members injectors for you classes
  +that are annotated with JSR330 annotations.
  +
  +The JSR330 annotation preprocessor generates factories for your classes that have an @Inject
  +annotated constructor.
  +
  +It generates a members-injector for each class that has @Inject annotated
  +setters or fields.
  +
  +And it generates a component containing all those factories and
  +members-injectors to avoid the usage of reflection.
  +
  +=== Configure Kapt
  +
  +[source,groovy]
  +----
  +dependencies {
  +    implementation 'javax.inject:javax.inject:1'
  +    kapt 'io.jentz.winter:winter-compiler:x.x.x'
  +}
  +
  +kapt {
  +    arguments {
  +        arg("winterGeneratedComponentPackage", "my.project.root.package.name")
  +    }
  +}
  +----
  +
  +This will generate a component named `generatedComponent` in the configured package here
  +`my.project.root.package.name`.
  +
  +In a simple application that only relies on JSR330 for injection this `generatedComponent` can
  +directly be used as application component but it is usually included in another component.
  +
  +=== Custom Scopes
  +
  +A custom scope is created via an extended `Scope` annotation like:
  +
  +[source,kotlin]
  +----
  +package my.project.root.package.name.scope
  +
  +import javax.inject.Scope
  +
  +@Scope
  +@Retention
  +annotation class ApplicationScope
  +----
  +
  +Every class that is annotated with this will be registered in a subcomponent with the qualifier
  +`ApplicationScope::class` as a `singleton`.
  +
  +Here a simple example of our CoffeeMaker:
  +
  +[source,kotlin]
  +----
  +@ApplicationScope
  +class Pump @Inject constructor()
  +
  +@ApplicationScope
  +class Heater @Inject constructor()
  +
  +@ApplicationScope
  +class CoffeeMaker @Inject constructor(val pump: Pump, val heater: Heater)
  +
  +val applicationGraph = generatedComponent.subcomponent(ApplicationScope::class).init()
  +val coffeeMaker: CoffeeMakter = applicationGraph.instance()
  +----
  +
   == Advanced Usage
   
   === Include Components
  
positive.code:         val coffeeMaker = CoffeeMaker()
          coffeeMaker.heater = instance()
          coffeeMaker.pump = instance()
      }
  }
  ----
  
negative.code: 
  === Plugins
  
  === Usage In Libraries
  