java spring aspect_Spring aspect 两种方式实现五种增强

我们都知道spring中AOP(面向切面编程)支持多种增强类型,使之我们能更注重核心业务,而那些交叉业务(切面)则由增强来处理,我们来看一下配置增强的两种方式:注解和XML

注解:

5950306.html

1.引入jar包(上传图片不能用,只能粘贴了)

aopalliance.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

commons-logging-1.2.jar

log4j-1.2.16.jar

spring-aop-4.2.0.RELEASE.jar

spring-aspects-4.2.0.RELEASE.jar

spring-beans-4.2.0.RELEASE.jar

spring-context-4.2.0.RELEASE.jar

spring-core-4.2.0.RELEASE.jar

spring-expression-4.2.0.RELEASE.jar

spring-test-4.2.0.RELEASE.jar

2.cn.aop---MyAspect.java(我们可以注释其他一个个测,因为抛出异常增强需要在UserdaoImpl.java中构建一个错误)

packagecn.aop;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.After;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.AfterThrowing;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;

@Aspectpublic classMyAspect {//前置

@Before("execution(public * *(..))")//execution(public * *(..))所有方法增强

public voidbeforeAspect(){

System.out.println("前置增强");

}//后置

@AfterReturning("execution(public * *(..))")public voidAfterReturningAspect(){

System.out.println("后置增强");

}//环绕/*@Around("execution(public * *(..))")

public void AroundAspect(ProceedingJoinPoint po){

System.out.println("环绕前增强");

try {

po.proceed();

} catch (Throwable e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("环绕后增强");

}*/

//异常

@AfterThrowing("execution(public * *(..))")public voidAfterThrowingAspect(){

System.out.println("异常增强");

}//最终

@After("execution(public * *(..))")public voidAfterAspect(){

System.out.println("最终增强");

}

}

3.cn.entity--Userdao.java

packagecn.entity;public interfaceUserdao {public voiddofirst();public voiddosecond();

}

4.cn.entity--UserdaoImpl.java

packagecn.entity;public class UserDaoImpl implementsUserdao{

@Overridepublic voiddofirst() {//TODO Auto-generated method stub

System.out.println("例子一");

}

@Overridepublic voiddosecond() {//TODO Auto-generated method stub

System.out.println("例子二");

}

}

5.cn.test--ASpectTest.java

packagecn.test;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcn.entity.Userdao;public classASpectTest {

@Testpublic voidAspectTestBefore(){

ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");

Userdao dao= (Userdao)context.getBean("daoimpl");

dao.dofirst();

dao.dosecond();

}

}

6.applicationContext.xml

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

XML:()

其他不变,cn.aop---MyAspect.java这个类改为(注解去掉,变为普通类):

packagecn.aop;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.After;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.AfterThrowing;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;

@Aspectpublic classMyAspect {//前置

public voidbeforeAspect(){

System.out.println("前置增强");

}//后置

public voidAfterReturningAspect(){

System.out.println("后置增强");

}public voidAroundAspect(ProceedingJoinPoint po){

System.out.println("环绕前增强");try{

po.proceed();

}catch(Throwable e) {//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("环绕后增强");

}//异常

public voidAfterThrowingAspect(){

System.out.println("异常增强");

}//最终

public voidAfterAspect(){

System.out.println("最终增强");

}

}

applicationContext.xml改变配置

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

今天就到这里!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值