繁体   English   中英

Spring AOP不起作用

[英]Spring AOP doesn't work

我将Spring AOP用于应用程序的日志记录系统。 但是我有一些麻烦。

我上课简单

@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class MessageReceiverImpl implements MessageReceiver {
    final private BufferedReader reader;

    public MessageReceiverImpl(BufferedReader reader) {
        this.reader = reader;
    }
    public String receive(){
        String msg = null;
        try {
            msg = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return msg;
    }
}

和带有Logioncut的Logger类用于MessageReceiverImpl

@Aspect
public class LoggerMessage {

    private static final Logger log = Logger.getLogger("listenerLogger");

    @Before("execution(* server.logic.listener.message.MessageReceiverImpl.receive(..))")
    public void logMessageReceiver() {
        log.info("INFO : LoggerMessage -> new Client");
    }
}

还有我的bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

    <aop:aspectj-autoproxy>
        <aop:include name="loggerMessage"/>
    </aop:aspectj-autoproxy>
    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!-- Aspect -->
    <bean id="loggerMessage" class="service.logger.listener.LoggerMessage" />

</beans>

但是在执行receive()方法之前它不起作用。 其他Log类效果很好。 我哪里有问题?

更多信息。 创建状态

@Bean
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
 UploadSession getSession(Socket socket) {
    UploadSessionImpl uploadSession = null;
    try {
        uploadSession = new UploadSessionImpl(socket);

        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        MessageReceiver receiver = new MessageReceiverImpl(reader);
        uploadSession.setReceiver(receiver);

        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        MessageSender sender = new MessageSenderImpl(out);
        uploadSession.setSender(sender);

        uploadSession.setBaseDir(context.getEnvironment().getProperty("listener.test-runs-folder"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    return uploadSession;
}

运用

public class UploadSessionImpl implements UploadSession,     ApplicationContextAware {

private MessageReceiver receiver;

public UploadSessionImpl(Socket socket) throws IOException {
    this.socket = socket;
}

public void process() throws IOException {
    String msg;

    while (true) {
        msg = receiver.receive();
        if (msg.equals("close")) break;
        ...
    }
}

到目前为止,您的代码看起来像是在弄乱bean创建配置。 试试这些:

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    public BufferedReader bufferedReader(Socket socket) throws Exception {
        return new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    public MessageReceiver receiver(BufferedReader bufferedReader) {
        return new MessageReceiverImpl(bufferedReader);
    }

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    UploadSession getSession(Socket socket, MessageReceiver receiver) {
        UploadSessionImpl uploadSession = null;
        try {
            uploadSession = new UploadSessionImpl(socket);

            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            uploadSession.setReceiver(receiver);

            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            MessageSender sender = new MessageSenderImpl(out);
            uploadSession.setSender(sender);

            uploadSession.setBaseDir(context.getEnvironment().getProperty("listener.test-runs-folder"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return uploadSession;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM