簡體   English   中英

Spring AOP方面未執行

[英]Spring AOP aspect around is not executing

我想記錄我的服務方法的執行時間。
我認為AOP是一種簡單的方法,所以我寫了一個Aspect:

@Aspect
public class ServiceLogAdviceAspect {
    private static Logger LOG = LoggerFactory.getLogger(ServiceLogAdviceAspect.class);

    @Around("execution(* com.j1.**.service.*(..))")
    public Object doBasicProfilingTime(ProceedingJoinPoint joinPoint) throws Throwable {
        String methodName = joinPoint.getSignature().getName();
        Object target = joinPoint.getTarget();
        long start = System.currentTimeMillis();
        Object retVal = joinPoint.proceed();
        long end = System.currentTimeMillis();
        LOG.error(String.format("Invoke [%s$%s] Takes %d ms", target.getClass().getCanonicalName(), methodName, (end - start)));
        return retVal;
    }
}

和Spring配置:

<?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-2.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
        default-autowire="byName">
    <aop:aspectj-autoproxy/>
    <bean id="logAdviceAspect" 
        class="com.j1.soa.common.aspect.ServiceLogAdviceAspect"></bean>
</beans>

但是當我調用方法時
public ServiceMessage<GoodsDetailDto> getGoodDetail(GoodsDetailDto goodsDetailDto)

我既沒有錯誤輸出,也沒有進入斷點。


編輯

getGoodDetail在類中定義
com.j1.soa.resource.item.service.GoodsDetailServiceImpl

我使用Hessian RPC來稱呼它,

application-context-rpc.xml首先定義了Remote Service的spring bean

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="goodsDetailService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="serviceUrl" value="http://api.soa.item.j1.com/hessian/goodsDetailService" />
        <property name="serviceInterface" value="com.j1.soa.resource.item.api.GoodsDetailService" />
        <property name="readTimeout" value="6000"/>
    </bean>
</beans>

然后在客戶端定義它

@Autowired
private GoodsDetailService goodsDetailService;

並使用它

GoodsDetailDto goodsDetailDto = new GoodsDetailDto();
goodsDetailDto.setGoodsId(NumericUtil.parseLong(goodsId));
goodsDetailDto.setProductId(NumericUtil.parseInt(productId));
goodsDetailDto.setSiteType(SiteType.MOBILE);

ServiceMessage<GoodsDetailDto> detailResult = goodsDetailService
                .getGoodDetail(goodsDetailDto);

您應該在<aop:aspectj-autoproxy/>包含logAdviceAspect

<aop:aspectj-autoproxy>
    <aop:include name="logAdviceAspect"/>
</aop:aspectj-autoproxy>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM