Nepxion Matrix — это AOP-фреймворк, который интегрирует три механизма Spring: AutoProxy, Registrar и Import Selector. Он отличается высокой универсальностью, надёжностью, гибкостью и удобством использования.
Spring AutoProxy
Механизм Spring AutoProxy объединяет проксирование интерфейсов (Spring) и классов (CGLIB). Аннотации можно размещать на интерфейсах, классах или методах. Это позволяет легко реализовать сложные прокси-сервисы для интерфейсов или классов.
Особенности:
— Реализует универсальные прокси и дополнительные прокси. — Позволяет использовать как проксирование интерфейса, так и проксирование класса в одном процессе. — Быстро сканирует аннотации на интерфейсах и методах и предоставляет их для реализации бизнес-логики. — Поддерживает режимы «только сканирование» и «сканирование с проксированием». — Может сканировать только интерфейсы или классы, а также только методы или все сразу. — Можно настроить проксирование нескольких аннотаций. — Разрешает использование нескольких перехватчиков для вызова методов. — Автоматически подключает перехватчики (поддерживается версиями Spring 4.3.X и выше). — Позволяет вызывать собственные методы аннотирования для достижения эффекта аспекта. — Предоставляет два способа вызова: автоматическое подключение и AopContext.currentProxy(). — Сканирует только указанные каталоги или сканирует все каталоги. — Получает имена переменных метода, соответствующего аннотации, используя стандартные возможности отражения или библиотеку ASM (ASM library).
Для использования стандартных возможностей отражения необходимо установить параметр компилятора "-parameters" в IDE и Maven.
Spring Registrar
Реализует динамическое проксирование и внедрение зависимостей, подобно аннотации @FeignClient.
Если есть только интерфейс без реализации, то выполняется соответствующий аспектный вызов. Если есть интерфейс с реализацией, то используется логика реализации.
Spring Import Selector
Позволяет автоматически инициализировать соответствующую конфигурацию при добавлении аннотации @EnableMyAnnotation к точке входа. Данный класс описывает логику, согласно которой, если на каком-либо методе целевого интерфейса или класса появится аннотация MyAnnotation2, то все методы этого интерфейса или класса будут просканированы и проксированы. Также для этого интерфейса или класса будет определён конкретный класс-посредник — MyInterceptor2.
@Component("myAutoScanProxyForMethod") public class MyAutoScanProxyForMethod extends DefaultAutoScanProxy { private static final long serialVersionUID = -481395242918857264L;
private static final String[] SCAN_PACKAGES = { "com.nepxion.matrix.proxy.simple" };
@SuppressWarnings("rawtypes")
private Class[] methodAnnotations;
@Autowired
private MyInterceptor2 myInterceptor2;
private Object[] myInterceptor2Array;
public MyAutoScanProxyForMethod() {
super(SCAN_PACKAGES, ProxyMode.BY_METHOD_ANNOTATION_ONLY, ScanMode.FOR_METHOD_ANNOTATION_ONLY);
}
@Override
protected Object[] getAdditionalInterceptors(Class<?> targetClass) {
if (targetClass == MyService2Impl.class) {
return getMyInterceptor2Array();
}
return null;
}
private Object[] getMyInterceptor2Array() {
if (myInterceptor2Array == null) {
myInterceptor2Array = new Object[] { myInterceptor2 };
}
return myInterceptor2Array;
}
@SuppressWarnings("unchecked")
@Override
protected Class<? extends Annotation>[] getMethodAnnotations() {
if (methodAnnotations == null) {
methodAnnotations = new Class[] { MyAnnotation2.class };
}
return methodAnnotations;
}
@Override
protected void methodAnnotationScanned(Class<?> targetClass, Method method, Class<? extends Annotation> methodAnnotation) {
System.out.println("Method annotation scanned, targetClass=" + targetClass + ", method=" + method + ", methodAnnotation=" + methodAnnotation);
}
}
Для более сложного использования обратитесь к коду в каталоге com.nepxion.matrix.proxy.complex.
См. matrix-spring-boot-registrar-example.
См. matrix-spring-boot-selector-example.
Пожалуйста, свяжитесь со мной через WeChat, DingTalk, официальный аккаунт или документацию.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )