我们都知道spring中AOP(面向切面编程)支持多种增强类型,使之我们能更注重核心业务,而那些交叉业务(切面)则由增强来处理,我们来看一下配置增强的两种方式:注解和XML
注解:
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">
今天就到这里!!!