AOP注解
Ø 实现AOP的注解有
Ø @Aspect 声明切面
Ø @Ponitcut 声明公共的切点表达式
Ø @Before 前置增强
Ø @AfterReturning 后置增强
Ø @Around 环绕增强
Ø @AfterThrowing 异常抛出增强
Ø @After 最终增强
前置增强剂后置增强
DoSomeServiceImpl业务类:
@Component("doSome") public class DoSomeServiceImpl { public void doSome(){ System.out.println("我是小明======"); } }
DoSomeAspet增强类:
@Aspect //声明该类为切面 @Component //将增强类注入到sprig容器中 public class DoSomeAspet { @Pointcut("execution(* com.sp.aspet.*.*(..))") public void pointcut(){ //声明切点表达式 }
@Before("pointcut()")
public void before(JoinPoint jp){
System.out.println("我是前置增强======"+jp.getSignature().getName());
}
@AfterReturning("pointcut()")
public void after(JoinPoint jp){
System.out.println("我是后置增强======"+jp.getSignature().getName());
}
}
application-aspet.xml文件:
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启Spring对注解的支持--> <context:annotation-config></context:annotation-config> <!--提供对注解的包的扫描器--> <context:component-scan base-package="com.sp.aspet"></context:component-scan> <!--开启Spring对AOP注解的配置--> <aop:aspectj-autoproxy/>
</beans>
测试:
public class Test { //AOP注解 public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/sp/aspet/aspet.xml"); DoSomeServiceImpl advice =applicationContext.getBean("doSome",DoSomeServiceImpl.class); advice.doSome(); } }
结果:
环绕增强
DoSomeServiceImpl业务类:
@Component("doSome") public class DoSomeServiceImpl { public void doSome(){ System.out.println("我是小明======"); } }
DoSomeAspet增强类:
@Aspect //声明该类为切面 @Component //将增强类注入到sprig容器中 public class DoSomeAspet { @Pointcut("execution(* com.sp.aspet.*.*(..))") public void pointcut(){ //声明切点表达式 }
@Around("pointcut()")
public void around(ProceedingJoinPoint jp)throws Throwable{
System.out.println("我是环绕前置增强======"+jp.getSignature().getName());
jp.proceed();
System.out.println("我是环绕后置增强======");
}
}
application-aspet.xml文件:
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启Spring对注解的支持--> <context:annotation-config></context:annotation-config> <!--提供对注解的包的扫描器--> <context:component-scan base-package="com.sp.aspet"></context:component-scan> <!--开启Spring对AOP注解的配置--> <aop:aspectj-autoproxy/> </beans>
测试:
public class Test { //AOP注解 public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/sp/aspet/aspet.xml"); DoSomeServiceImpl advice =applicationContext.getBean("doSome",DoSomeServiceImpl.class); advice.doSome(); } }
结果:
异常抛出增强
DoSomeServiceImpl业务类:
@Component("doSome") public class DoSomeServiceImpl { public void doSome(){ int num=5/0; System.out.println("我是小明======"); } }
DoSomeAspet增强类:
@Aspect //声明该类为切面 @Component //将增强类注入到sprig容器中 public class DoSomeAspet { @Pointcut("execution(* com.sp.aspet.*.*(..))") public void pointcut(){ //声明切点表达式 }
@AfterThrowing(value = "pointcut()",throwing = "e")
public void error(JoinPoint jp,Exception e)throws Throwable{
System.out.println("我是异常抛出增强======"+jp.getClass().getSimpleName());
}
}
application-aspet.xml文件:
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启Spring对注解的支持--> <context:annotation-config></context:annotation-config> <!--提供对注解的包的扫描器--> <context:component-scan base-package="com.sp.aspet"></context:component-scan> <!--开启Spring对AOP注解的配置--> <aop:aspectj-autoproxy/> </beans>
测试:
public class Test { //AOP注解 public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/sp/aspet/aspet.xml"); DoSomeServiceImpl advice =applicationContext.getBean("doSome",DoSomeServiceImpl.class); advice.doSome(); } }
结果:
最终增强
DoSomeServiceImpl业务类:
@Component("doSome") public class DoSomeServiceImpl { public void doSome(){ //int num=5/0; System.out.println("我是小明======"); } }
DoSomeAspet增强类:
@Aspect //声明该类为切面 @Component //将增强类注入到sprig容器中 public class DoSomeAspet { @Pointcut("execution(* com.sp.aspet.*.*(..))") public void pointcut(){ //声明切点表达式 }
@After("pointcut()")
public void after(JoinPoint jp)throws Throwable{
System.out.println("我是最终增强======"+jp.getSignature() .getName());
}
}
aspet.xml文件:
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启Spring对注解的支持--> <context:annotation-config></context:annotation-config> <!--提供对注解的包的扫描器--> <context:component-scan base-package="com.sp.aspet"></context:component-scan> <!--开启Spring对AOP注解的配置--> <aop:aspectj-autoproxy/> </beans>
测试:
public class Test { //AOP注解 public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/sp/aspet/aspet.xml"); DoSomeServiceImpl advice =applicationContext.getBean("doSome",DoSomeServiceImpl.class); advice.doSome(); } }
结果: