Necesito crear un aspecto que me resulta difícil de describir, por lo que permítanme señalar las ideas:pointcut primavera AOP con un argumento cierto
- cualquier método dentro del paquete (o cualquier subpaquete) del com. xy ..
- un argumento método es una implementación de una interfaz javax.portlet.PortletRequest
- es posible que me más argumentos en el método
- pueden estar en cualquier orden
necesito un punto de corte y un consejo "en torno" a la PortletRequest dado
Actualmente tengo SMT como:
@Pointcut("execution(* com.x.y..*.*(PortletRequest,..)) && args(request,..)")
public void thePointcut(PortletRequest request) {
}
@Around("thePointcut(request)")
public Object theAdvice(ProceedingJoinPoint joinPoint, PortletRequest request) {
...
y recibo un error:
ERROR 10:47:27.159 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] o.s.web.portlet.DispatcherPortlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet. mvc.HttpRequestHandlerAdapter': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: w arning no match for this type name: PortletRequest [Xlint:invalidAbsoluteTypeName]
Cualquier ayuda muy apreciada
Saludos cordiales, Dan
ACTUALIZACIÓN el método que estoy tratando de interceptar es:
en clase pública com.xyMainClass:
public String mainRender(Model model, RenderRequest request) throws SystemException
en clase pública com.xyasd.HelpClass :
public final void helpAction(ActionRequest request, ActionResponse response, Model model)
De cource, quiero obtener el argumento que implementa PortletRequest, que es RenderRequest desde el primer método, y ActionRequest desde el segundo.
Saludos, Dan
Ya no consigo el error, pero el pointcut no capta el método. Para ser más concreto, consulte la publicación actualizada anteriormente. – Queequeg
Ambos métodos o solo el método mainRender. La forma en que ha definido el punto de corte solo coincidirá con aquellos métodos donde el primer parámetro es PortletRequest. Puedes probar algo como args (.., request, ..) - no estoy seguro si eso funcionaría.También puede reordenar los argumentos para que PortletRequest sea el primer argumento. – gkamal
Me gustaría buscar cualquier método con una Petición de Portlet entre los parámetros, y tener acceso a esa solicitud. – Queequeg