Я пытаюсь научиться писать собственные аннотации на Java.
В целях обучения я решил попытаться создать аннотацию, которая сделает поле доступным для класса с помощью аннотации, то есть: внедрение, но не обязательное использование в качестве одиночного элемента, чтобы сделать его немного более простым (я думаю), но это также приветствуется.
======================================= КЛАСС 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 {
}
======================================= КЛАСС 2 ====== ===========================
// The class to be injected in Main.java
public class TestClass0 {
void printSomething(){
System.out.println("PrintSomething: TestClass0");
}
}
======================================= КЛАСС 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, ожидая его доступности. Я знаю, что вышеупомянутое уже близко к завершению, но я только начал изучать аннотации и хотел бы получить ваше руководство.
Как мы можем запустить фрагмент кода, который инициализирует свойство либо в new , либо при вызове get метода . Использование аннотаций. Я думаю без изменения вызывать метод.
Спасибо!