我定义一个方面如下:
@Component
@Aspect
public class ServiceMethodExecuteTimeAspect {
private Logger logger = LoggerFactory.getLogger(getClass());
@Pointcut("execution(* *.service.*.*(..))")
public void serviceMethod() {
}
@Around("serviceMethod()")
public Object executeTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object result;
MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = signature.getMethod();
long executeTime;
long start;
try {
start = System.currentTimeMillis();
result = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
executeTime = end - start;
logger.debug("ServiceMethodExecuteTimeAspect class method:{}#{} execute time is:{}", proceedingJoinPoint.getTarget().getClass().getName(), method.getName(), executeTime);
return result;
} catch (Throwable throwable) {
logger.error("ServiceMethodExecuteTimeAspect throw exception", throwable);
throw throwable;
}
}
}
我在服务包中有一个服务类,如下所示:
package example.service;
@Service
public class AService{
public void methodA(){methodB();}
public void methodB(){}
}
DEBUG o.s.a.f.CglibAopProxy - Unable to apply any optimizations to advised method: public example.AService.methodB();
一种方法可以做到这一点,定义另一个服务,并将方法methodb()
移到其中。
尝试在controller上添加@Validated方法,它起作用了 它应该抛出MethodArgumentNotValidException但不抛出。
问题内容: 按照javadoc的通知,唤醒正在此对象的监视器上等待的单个线程。如果有任何线程在此对象上等待,则选择其中一个唤醒。选择是任意的,并且可以根据实现情况进行选择。线程通过调用其中一个wait方法在对象的监视器上等待。 我想知道如何通过通知实现此行为。我在许多站点上都读到它发出信号,但是信号在这里意味着什么? notify是直接向第一个等待线程发送信号还是向线程调度程序发送信号? 问题答案
问题内容: 我对迭代器的方法有疑问。如果我的代码包含以下内容(大小为4),请执行以下操作: 在第一次迭代时,迭代器开始指向索引为0的元素?还是喜欢“指数-1”? 我问,因为据我所知,该方法返回集合中的下一个元素。 因此,如果在第一次迭代时迭代器在被调用时从索引0开始,它将返回索引1的元素,而我将无法对索引0的元素做任何事情? 问题答案: 可以将其视为两步过程。首先,它获得迭代器中的下一个项目,然后
我正在尝试修改一个插件(Pikaday)并添加我自己的一点点功能。 这个插件是使用原型系统构建的,我在其中添加了我的函数。 我很难理解的是如何实际触发这个方法。单击指定的元素不起作用。 如果有人感兴趣,这里有完整的代码(减去我的加法)。
问题内容: 我很好奇java如何通过使用Object API的hashCode()方法生成哈希值? 问题答案: Java不会生成hashCode(),即此处没有自动发生的情况。但是,根据对象实例的内存地址生成HashCode。大多数类(尤其是如果要在任何API中使用它的类)都应该实现自己的HashCode(并通过契约使用自己的equals方法)。