Customizable injection of bean properties, based on

For example:

 new AbstractModule() {
   @Override protected void configure() {
     bindListener( Matchers.any(), new BeanListener( new MyBeanBinder() ) );
MyBeanBinder will be asked to supply a PropertyBinder for each bean type, say Foo.

That PropertyBinder will be asked to supply a PropertyBinding for each property (field or setter) in Foo.

Those PropertyBindings are then used to automatically configure any injected instances of Foo.


BeanBinder Provides custom PropertyBinders for beans that contain one or more properties. 
BeanManager Service that manages the lifecycle of beans. 
BeanProperty<T> Represents a bean property such as a field or setter method. 
PropertyBinder Provides custom PropertyBindings for bean properties such as fields or setter methods. 
PropertyBinding Represents a bean property that has been bound by a PropertyBinder


BeanListener TypeListener that listens for bean types and arranges for their properties to be injected. 
BeanProperties Iterable that iterates over potential bean properties in a class hierarchy. 
BeanScheduler Schedules safe activation of beans even when cyclic dependencies are involved. 
DeclaredMembers Iterable that iterates over declared members of a class hierarchy. 
LifecycleManager BeanManager that manages JSR250 beans and schedules lifecycle events. 
LifecycleModule Guice Module that provides JSR250 lifecycle management by following PostConstruct and PreDestroy annotations. 


IgnoreSetters Annotates class hierarchies that don't want setter injection. 


DeclaredMembers.View Enum implementation that provides different views of a class's members.