`
itsoul
  • 浏览: 215991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring aspect

阅读更多
面向切面编程,代码如下:

@Aspect
public class ControllorAspectj {

	@Pointcut("within(com.spring.test.action.*)")
	public void doManagerActionClass() {
	}

	@Before("execution(public * * (..))")
	public void getUser(JoinPoint jp) throws IOException {
		
		System.out.println("任意公共方法的执行");
	}
	
	@Pointcut("execution(* do*(..))")
	public void doMethod(){
	}
	
	@Before(value="com.spring.test.common.ControllorAspectj.doMethod() && target(bean)",argNames="bean")
	public void beforeDo(JoinPoint jp,Object bean) throws Exception {
		String sourceLocation=jp.getKind();
		
		Signature signature=jp.getSignature();
		MethodSignature methodSignature = (MethodSignature) signature;  
		Method method = methodSignature.getMethod();  
		method.invoke(jp.getTarget(),jp.getArgs());
		System.out.println("方法名:"+method.getName());
		System.out.println("任意以do开头的方法"+sourceLocation);
	}
	
	@Pointcut("within(com.spring.test..*)")
	public void before3(){
		System.out.println("test包以及他的子包");
	}
	

	@AfterThrowing(pointcut="com.spring.test.common.ControllorAspectj.before3()",throwing="ex")
	public void afterThrows(JoinPoint jp,Throwable ex) {
		ex.printStackTrace();
		System.out.println("test包以及他的子包抛出的异常"+ex.getMessage());
	}
	
	@AfterReturning("this(com.spring.test.IBaseAction)")
	public void afterReturn(){
		System.out.println("after return,实现了IBaseAction");
	}

}


注:任何通知方法可以将第一个参数定义为org.aspectj.lang.JoinPoint类型 (环绕通知需要定义第一个参数为ProceedingJoinPoint类型, 它是 JoinPoint 的一个子类)。

以上注意几点:
1、该类声明为@Aspect;
2、在spring配置文件中声明:
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean id="controllerAspect"
class="com.spring.test.common.ControllorAspectj"/>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics