diff --git a/framework/src/play/inject/Injector.java b/framework/src/play/inject/Injector.java index a9e34dfc1a..6211ecad46 100644 --- a/framework/src/play/inject/Injector.java +++ b/framework/src/play/inject/Injector.java @@ -15,7 +15,7 @@ public class Injector { /** - * For now, inject beans in controllers + * For now, inject beans in controllers and any classes that include @RequireInjection. * * @param source * the beanSource to inject @@ -24,6 +24,7 @@ public static void inject(BeanSource source) { List classes = new ArrayList<>(Play.classloader.getAssignableClasses(ControllerSupport.class)); classes.addAll(Play.classloader.getAssignableClasses(Mailer.class)); classes.addAll(Play.classloader.getAssignableClasses(Job.class)); + classes.addAll(Play.classloader.getAnnotatedClasses(RequireInjection.class)); for (Class clazz : classes) { for (Field field : clazz.getDeclaredFields()) { if (Modifier.isStatic(field.getModifiers()) && field.isAnnotationPresent(Inject.class)) { diff --git a/framework/src/play/inject/RequireInjection.java b/framework/src/play/inject/RequireInjection.java new file mode 100644 index 0000000000..68023f6039 --- /dev/null +++ b/framework/src/play/inject/RequireInjection.java @@ -0,0 +1,13 @@ +package play.inject; + +import java.lang.annotation.*; + +/** + * if you want to inject beans anywhere,please implement the interface. + * + */ +@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RequireInjection { +}