Spring aop не запускается для внешнего метода jar в приложении весенней загрузки - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сократить точку для метода в jar, и он не запускается должным образом

У меня есть код конечной точки покоя, как показано ниже:

package com.example.log.javatpoint;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Test{

    @Autowired
    Operation op;

    private static final Logger LOG = LogManager.getLogger(Test.class);

    @RequestMapping(value = "/customs", method = RequestMethod.GET)
    public String custom() {
        op.msg();  
        op.display(); 

        LOG.info("Hello World");
        LOG.info("Hello {0}", "World 2");

        return "custom";
    }
}

Класс операции:

@Component
public  class Operation{
    public void msg(){System.out.println("msg() is invoked");}
    public void display(){System.out.println("display() is invoked");}
}
@Aspect
@Component
public class TrackOperation
{
    @Pointcut("execution(* Operation.*(..))")
    public void abcPointcut(){}

    @Around("abcPointcut()")
    public Object myAdvice(ProceedingJoinPoint pjp) throws Throwable 
    {
        System.out.println("Additional Concern Before calling actual method");
        Object obj=pjp.proceed();
        System.out.println("Additional Concern After calling actual method");
        return obj;
    }

    @Pointcut("execution(* org.apache.logging.log4j.LogManager.info(..))")
    public void abcPointcutLog(){}

    @Around("abcPointcutLog()")
    public Object myAdviceLog(ProceedingJoinPoint pjp) throws Throwable 
    {
        System.out.println("Additional Concern Before calling actual method");
        Object obj=pjp.proceed();
        System.out.println("Additional Concern After calling actual method");
        return obj;
    }
}

Примечание: срез точки работает для класса Операции, где срез точки не работает для org.apache.logging.log4j.LogManager, попытался также обеспечить org.apache.logging.log4j.Logger срез точки.

Я ожидаювыводится как:

Additional Concern Before calling actual method
2019-09-24 12:28:58.540  INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test          : Hello World
Additional Concern After calling actual method
Additional Concern Before calling actual method
2019-09-24 12:28:58.540  INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test          : Hello {0}
Additional Concern After calling actual method

, но фактический вывод:

2019-09-24 12:28:58.540  INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test          : Hello World
2019-09-24 12:28:58.540  INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test          : Hello {0}

1 Ответ

0 голосов
/ 24 сентября 2019

Этот вопрос является "классическим" и уже задавался здесь уже много раз ...

Пожалуйста, прочитайте руководство Spring AOP перед использованием инструмента, которого вы не знаете.Он скажет вам, что Spring AOP можно применять только к компонентам / бобам Spring , но не к POJO, отличным от Spring.Для этого вам нужен полный AspectJ, который вы можете использовать в Spring или полностью без Spring.

Классы Log4J не являются компонентами Spring, поэтому вышеприведенное применимо к вашей ситуации. Здесь вы найдете информацию о том, как использовать AspectJ ткачество времени загрузки (LTW) вместо Spring AOP для вашей цели.

...