NC6 对组件进行AOP编程

1.用声明一个切面类,注解用法没有什么特殊的,注意,advice一定要指定匹配类型(patternType=PatternType.method),只能拦截远程组件调用的方法。

package nc.bs.uap.aop;

import java.lang.reflect.Method;

import nc.bs.framework.aop.After;
import nc.bs.framework.aop.Around;
import nc.bs.framework.aop.Aspect;
import nc.bs.framework.aop.Before;
import nc.bs.framework.aop.Joinpoint;
import nc.bs.framework.aop.PatternType;
import nc.bs.framework.aop.Pointcut;
import nc.bs.framework.aop.ProceedingJoinpoint;
import nc.bs.logging.NCSysOutWrapper;

@Aspect
public class LogInterceptor {
    
    
	@Pointcut
	public boolean methodInterceptor(Method method){
    
    
		NCSysOutWrapper out = (NCSysOutWrapper) System.out;
		out.getSysStream().println("Log-methodInterceptor");
		return true;
		
	};
	// Before类型的 Advice
	@Before(pointcut = "methodInterceptor",patternType=PatternType.method)
	public void beforeMethod(Joinpoint joinpoint) {
    
    
		NCSysOutWrapper out = (NCSysOutWrapper) System.out;
		out.getSysStream().println("Log-beforeMethod");
	}

	// After类型的 Advice
	@After(pointcut = "methodInterceptor",patternType=PatternType.method)
	public void afterMethod(Joinpoint joinpoint) {
    
    
		NCSysOutWrapper out = (NCSysOutWrapper) System.out;
		out.getSysStream().println("Log-afterMethod ");
	}

	// Around类型的 Advice
	@Around(pointcut = "methodInterceptor",patternType=PatternType.method)
	public Object aroundMethod(ProceedingJoinpoint pj) throws Throwable {
    
    
		NCSysOutWrapper out = (NCSysOutWrapper) System.out;
		out.getSysStream().println("Log-before aroundMethod ");
		Object result = pj.proceed();
		out.getSysStream().println("Log-after aroundMethod ");
		return result;
	}
}

2.手写一个aop文件,指定切面类和目标组件,注意要和组件的upm文件放在同一路径下

<?xml version="1.0" encoding="UTF-8"?>
<module priority="1025">
    <aops>
            <aspect class="nc.bs.uap.aop.LogInterceptor"  component="nc.itf.hi.IPsndocService"/>
    </aops>
</module>

3.具体应用,比如在单据保存前后增加校验和业务逻辑,不用去破坏源代码

猜你喜欢

转载自blog.csdn.net/guaizang/article/details/105417286
nc