如何在实现java.security.Principal的类中围绕方法创建方面?
有人知道如何在实现java.security.Principal接口的类中围绕方法“getName()”创建方面吗 我正在使用spring,下面是我的课程的相关部分:如何在实现java.security.Principal的类中围绕方法创建方面?,java,spring,aspectj,aop,Java,Spring,Aspectj,Aop,有人知道如何在实现java.security.Principal接口的类中围绕方法“getName()”创建方面吗 我正在使用spring,下面是我的课程的相关部分: @Aspect public class MyPrincipalAspect { @PointCut("(execution(* java.security.Principal.getName(..)))") private void getNamePC(){} @Around("getNamePC()"
@Aspect
public class MyPrincipalAspect {
@PointCut("(execution(* java.security.Principal.getName(..)))")
private void getNamePC(){}
@Around("getNamePC()")
public Object getNameJP(ProceedingJoinPoint pjp) throws Throwable {
Object retVal = pjp.proceed();
return retVal;
}
}
实际上,我想用“retVal”做一些事情,但是,我只是把上面的例子作为一个简单的例子。我的应用程序中还有其他方面,它们都很好
我在AspectJ站点上读到一些关于不能从java包加载time weave类的内容,但是他们说这仍然是可能的(但是,他们没有给出任何示例)
我还尝试了一种非Spring方法(使用一个aop.xml文件,其中javaagent在我的AppServer配置参数中定义)
非常感谢您的帮助
谢谢。您有几种选择:
- 如果可以控制调用
的客户机类,则可以使用getName
切入点,而不是调用
。这样,您就不需要编织任何JDK类执行
- 如果要拦截的
子类不是JDK,而是第三方类(您没有提到),则可以在编译或加载时轻松地编织它们Principal
- 如果确实需要编织JDK/JRE类,请在现有类文件中使用编译时编织,在输出目录中创建新的编织类。然后使用这些类替换原始JDK/JRE类,将它们复制到默认位置。只要运行时环境在您的控制之下,这就足以进行调试,甚至可以用于生产性使用
- 也许(我不知道,因为我没有尝试过)有一种方法可以编写一个类加载器,首先加载运行时weaver类,但它听起来不太可能,也不像是一个简单的选项。为了找到答案,我必须自己做一个网络搜索或一些编码实验
更新:哦,顺便说一下,在切入点中,您可能希望使用
Principal+
而不仅仅是Principal
,以便拦截重写的方法。您有几个选项:
- 如果可以控制调用
的客户机类,则可以使用getName
切入点,而不是调用
。这样,您就不需要编织任何JDK类执行
- 如果要拦截的
子类不是JDK,而是第三方类(您没有提到),则可以在编译或加载时轻松地编织它们Principal
- 如果确实需要编织JDK/JRE类,请在现有类文件中使用编译时编织,在输出目录中创建新的编织类。然后使用这些类替换原始JDK/JRE类,将它们复制到默认位置。只要运行时环境在您的控制之下,这就足以进行调试,甚至可以用于生产性使用
- 也许(我不知道,因为我没有尝试过)有一种方法可以编写一个类加载器,首先加载运行时weaver类,但它听起来不太可能,也不像是一个简单的选项。为了找到答案,我必须自己做一个网络搜索或一些编码实验
Principal+
而不仅仅是Principal
,以便拦截重写的方法