Benpian diseñado para permitir a los lectores a Spring AOP tienen una buena comprensión de la realización del principio de una macro, por lo tanto, perder algunos de los detalles, referirse a la aplicación específica: un directorio de origen Primavera hombre honesto
antes de leer este artículo, los lectores quieren utilizar primavera AOP y la primavera de la COI ( @Aspect) por una cierta comprensión, hombre de pocas palabras, dijo, directamente en el mapa
preparativos
Service
Clase: Existe la necesidad de encontrar métodos antes y después de la operación de caché con el método para guardar, encontrar el método, las necesidades método para guardar operaciones en todo transaccionalesCacheableAspect
sección de clase: antes y después de la operación para el almacenamiento en caché de métodos de búsqueda de usoTransctionlAspect
Categorías de la sección: Servicio de ahorrar método para hacer funcionar una transacciónLogAspect
clases de aspecto: las solicitudes de registro del controlador todo el
Primavera AOP sincronización automática de proxy
En la service
creación del grano (es decir getBean("service")
), AOP por BeanPostProcess postprocesador para operaciones de intervención
se dividen en dos casos:
- Definido por el usuario
targetSource
, se crea el frijol (instancia, el llenado, la inicialización) por el usuario responsable, Primavera COI no posesión del objeto de destino del proxytraget
, esto básicamente no sucede, una gran cantidad de personas con unos pocos años de mayo de primavera no sé que existe - Primavera Ioc normalmente se completa objeto proxy
target
para instanciar llena de inicialización. Y luego intervenir en el post-procesador de inicialización, porbean
eso esservice
un proxy
Creación de un wrapIfNecessary operativo de agente
Todo el énfasis en la wrapIfNecessary
operación que se hace lo que ha sido
las llamadas de método de proxy
Una vez que haya creado el agente, si se llama a los métodos? Tenemos Jdk动态代理
como ejemplo, la llamada al método dará lugar a invoke
métodos. fuente de referencia específico Jdk proxy dinámico para la fuente subyacente
El orden de ejecución de los interceptores de primavera AOP
Como puede verse de lo anterior, el proxy de primavera AOP invoke
es en realidad método 拦截器
implementado.
Lo primero que mira en el orden de ejecución de primavera AOP, con 栈
como, LIFO
AOP aplicación interceptor del principio de
A continuación, la cadena interceptor y la forma de asegurar que before
en after
antes de que? Sino también para asegurar que find
el orden de los métodos de ejecución? Para más información lea a invocar el principio de MethodInvocation interceptores de
esta parte de la realización del principio se explica por unas palabras sin fin, teniendo en cuenta la carta sólo se puede obtener una idea
concreta interceptor Fuente:
public class MethodBeforeAdviceInterceptor implements MethodInterceptor, BeforeAdvice, Serializable {
private final MethodBeforeAdvice advice;
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
// 先调用before方法
this.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis());
// 继续链式调用
return mi.proceed();
}
}
public class AfterReturningAdviceInterceptor implements MethodInterceptor, AfterAdvice, Serializable {
private final AfterReturningAdvice advice;
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
// 先进行链式调用
Object retVal = mi.proceed();
// 再调用afterReturning方法
this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis());
return retVal;
}
}
Título final: Spring AOP se reunió dependencias circulares
La parte del grado de dificultad de las estrellas de diez, considerada como la más compleja pieza Fuente en primavera, esto se puede decir que tener sentido de la comprensión de la primavera ha llegado al nivel de Ali. Aquí es imposible de explicar en pocas palabras, y sólo publicado un mapa, tenemos un conocimiento de la macro, los detalles de primavera AOP se reunió dependencias circulares
resumen
Primavera AOP es una parte importante de la primavera, Benpian acaba de dar al lector una comprensión en la macro-específica o necesidad de leer el código fuente.
Pintar no es fácil, pesos pesados problemas elogio dar! No entiendo el problema puede dejar un mensaje, responderá a ella, hay también la bienvenida a explorar el lugar equivocado!