栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

同一包中的@Around @Aspect仅适用于@DependsOn

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

同一包中的@Around @Aspect仅适用于@DependsOn

实际问题

正如亚历山大·帕德林AlexanderPaderin在其对相关问题的回答中所描述的>>中的无限循环

afterPropertiesSet()
是线程阻止程序,因为在这种情况下,控制权并未返回到 Spring

1.使用示例的示例(问题编辑后不实际)

您提供的代码示例不直接包含问题, AspectJ 声明很好。

首先,请让我分享一个工作示例:spring-aspectj-sockets。它基于 Spring 5.1.0AspectJ 1.9.1
(当前最新版本),并且使用您的示例,而与的位置/包无关

MyServiceAspect


2.问题说明

2.1。介绍

您的示例中最可能的线程阻止程序是对的调用

ServerSocket.accept()
,该方法的javadocs说:

监听与此套接字建立的连接并接受它。 该方法将阻塞,直到建立连接为止。

有2种正确的处理方式

accept()

  1. 首先初始化连接,例如:

    serverSocket = new ServerSocket(18080);

    clientSocket = new Socket(“127.0.0.1”, 18080); // initializing connection
    Socket socket = serverSocket.accept(); // then calling accept()

  2. 设置超时以等待接受:

    serverSocket = new ServerSocket(18080);

    serverSocket.setSoTimeout(5000); // 5 seconds timeout
    Socket socket = serverSocket.accept(); // then calling accept()

注意 :如果5秒钟之内没有连接,

accept()
将抛出异常,但不会阻塞线程

2.2。假设条件

我假设您使用的是1-st方法,并且在某处有一条线初始化连接,即

clientSocket = new Socket("127.0.0.1",18080);

但是它被调用(例如,如果使用静态声明):

  • 之后
    serverSocket.accept()
    以防万一
    MyServiceAspect
    位于同一包装中并且
  • 之前-如果
    MyServiceAspect
    位于其他地方

3.调试

我不确定是否需要这样做,由于悬赏的描述有疑问,让我快速介绍一下,以防万一。

您可以使用“ 远程调试” 来调试应用程序-它涵盖了方面,子线程,服务等。-您只需要:

  1. 使用特定参数运行 Java ,如本问题中所述>>
  2. 并使用IDE连接到指定的调试端口(在同一问题中描述了 Eclipse的 步骤)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号