我正在尝试学习如何在Java中编写自定义注释。为了学习的目的,我决定尝试创建一个使用注释为类提供可用字段的注释,例如:注入但不是必需的,作为单例让它更简单(我认为),但这也是受欢迎的。注入另一个对象的Java自定义注释
================================= CLASS 1 ========= ========================
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface AutoInject {
}
=================== ============== CLASS 2 ================================ =
// The class to be injected in Main.java
public class TestClass0 {
void printSomething(){
System.out.println("PrintSomething: TestClass0");
}
}
================================= CLASS 3 ===== ============================
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
public class Main {
TestClass0 ts0;
// Injecting here!!
@AutoInject
public TestClass0 getTso() {
return ts0;
}
public void setTso(TestClass0 ts) {
ts0 = ts;
}
public static void main(String[] args) {
performAnnotationScanOnClass (Main.class);
// Create instance
Main main = new Main();
main.getTso().printSomething();
}
public static void performAnnotationScanOnClass(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Annotation[] annotations = field.getAnnotations();
for (Annotation annotation : annotations) {
if (annotation instanceof AutoInject) {
AutoInject autoInject = (AutoInject) annotation;
// if (field.get(...) == null)
// field.set(... , value)
}
}
}
}
}
正如你可以在静态void main()中看到的...我试图调用TestClass0中的方法,期望它可用。我知道上述内容从接近完成开始就很长,但我刚开始学习注释并希望得到您的指导。
我们如何能火的一段代码,即initializez物业无论是在新或当get方法被调用。使用注释。我想而不改变调用方法。
谢谢!
你认为你的测试注释,但你真的重塑CDI。不要...重塑...轮子。 – Perception 2012-02-24 15:52:00
我没有重新发明任何东西。我正在努力学习其他人如何实现和创造,而不是使用它。你了解区别?它的教育目的。 – momomo 2012-02-24 16:24:13
好吧,祝你好运吧!我相信你会学到很多东西。 – Perception 2012-02-24 17:09:02