当前位置: 首页 > 知识库问答 >
问题:

如何将pointcut作为用户输入应用于遗留代码的spring aop

和光启
2023-03-14

我必须对遗留代码应用Spring AOP,而不改变现有代码中的任何内容。没有bean概念,对象是使用new关键字创建的,因此没有使用ApplicationContext.getBean(“Beanname”)的范围。此外,切入点将被作为来自最终用户的输入,并且将有一个公共方面类。

package package1;

public class Demo1 {

public void method1()
{
    System.out.println("From method1");
}

public void method2()
{
    System.out.println("From method2");
}

}


package package2;

public class Demo2 {

public void method3()
{
    System.out.println("From method3");
}

public void method4()
{
    System.out.println("From method4");
}

}

package aspects;

public class SpringAspect {

public void beforeAdvice(JoinPoint jointPoint)
{
    System.out.println("Before method : "+jointPoint.getSignature());
}

}

此外,如果使用Spring AOP是不可能的,那么如何在运行时使用AspectJ。

共有1个答案

盛辰沛
2023-03-14

首先,您所谓的方面缺少与方面相关的注释,如@aspect@before,没有这些注释,它只是一个POJO类。它将永远不会被执行,甚至不会被承认为一个方面。

其次,Spring AOP是一个基于代理的框架,它只与Spring组件相关联,而不与POJO类相关联。您需要AspectJ来解决您的问题。(顺便说一下,你读过教程或者Spring或AspectJ手册吗?我想你没有读过。)

此外,您究竟为什么希望用户在运行时输入切入点?你应该不知道在什么地方应用你的方面稍早一点吗?即使我向您展示了一个动态创建方面的解决方案,它们也不是很有价值,因为即使是加载时编织也需要在类加载期间检测Java代码。如果目标类已经加载,则无法在事后对其应用方面。

如果您想要一种更动态的方式来定义切入点,而不是在方面中对它们进行硬编码,那么您可以创建一个带有抽象切入点的抽象基方面,并在aop.xml文件中定义具体的切入点,该文件用于加载时编织,如AspectJ文档中所述。

希望这能帮上忙。

 类似资料:
  • 我打算用projectreactor库编写一个process()方法 process()方法将字节数组作为参数,并执行以下步骤。假设每个步骤的所有其他方法都已编写并准备好使用。 将字节数组反序列化为消息对象 从消息对象提取用户ID、用户状态和用户地址 从数据库中按用户ID检索记录 如果从消息对象提取的这两个值不为Null,则使用userStatus和userAddress更新记录 将记录保存到数据

  • 我正在尝试将输入验证添加到一组三个 ,用户在其中输入数值。我面临的问题是,为了使计算正常工作,用户无法输入零作为输入字段之一,否则应用程序将崩溃。 我尝试实现以下操作以防止输入零并显示警告消息。我收到一条错误消息,指出“无法启动活动calcResult”,这是显示计算的活动。 这是错误日志的链接:http://pastebin.com/hDsabjR6 我从这里了解到,零值仍然在通过验证,但我不知

  • 我是初级程序员。我正在尝试编写一个代码,要求用户输入必须是1-20号,而且不是字母。 null

  • 我有一个简单的html输入字段 我尝试了不同的方法来捕获Edge(我的版本是Microsoft Edge 44.18362.449.0)中的clear(当我用鼠标输入文本框以在其中键入内容时,文本框右侧会出现)事件。 但是它们都没有对清除事件做出反应(除了在它之后,当鼠标离开输入时可以触发的更改):这是不可行的吗?

  • 我很难将spring-boot应用程序作为另一个java(非Spring)应用程序的依赖项。 我被要求用一些方法和对Oracle数据库的访问来开发一个新的REST API。为此,我使用了Spring-boot,应用程序本身或部署在服务器上都运行良好。经过几次调整,我把它分成了几个模块,如下所示: models:包含业务代码的模型对象 API:包含业务代码和实际API 对模型有依赖关系 包含连接到数

  • 尽管维基百科上对遗留系统的定义是: 一种旧的方法、旧的技术、旧的计算机系统或应用程序。 但是实际上,当你看到某个网站宣称用新的框架来替换旧的框架的时候,你应该知晓他们原有的系统是遗留系统。人们已经不想在上面工作了,很多代码也不知道是干什么的,也没有人想去深究——毕竟不是自己的代码。判断是否是遗留代码的条件很简单,维护成本是否比开发成本高很多。 几乎无法维护 代码遗失 逻辑不清 没有文档或者不够详细