+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target( { ElementType.FIELD, ElementType.METHOD })
+ public static @interface MyAnnotation {
+
+ }
+
+ public static class Z {
+ @MyAnnotation
+ private int x;
+
+ // any annotation will force traversal.
+ @Mock
+ private Z z;
+
+ }
+
+ @Test
+ public void testCustomInjection() {
+ JavaEETestInjectorFactory factory = new JavaEETestInjectorFactory();
+ factory.addBinding(new Binding(int.class, MyAnnotation.class, 100));
+ InjectorBuilder.setInjectorFactory(factory);
+
+ Z z = new Z();
+ z.z = new Z();
+ assertEquals(0, z.x);
+ InjectorBuilder.getInjector().inject(z);
+ assertEquals(100, z.x);
+ assertEquals(100, z.z.x);
+ }
+
+