Spring-增强方式注解实现方式

SpringAOP增强是什么,不知道的到上一章去找,这里直接上注解实现的代码(不是纯注解,纯注解后续会有)

创建业务类代码

 1 @Service("dosome")//与配置文件中<bean id="dosome" class="com.com.service.DoSome"/>一样
 2 public class DoSome {
 3     public void dosome(){
 4         System.out.println("我是service层");
 5     }
 6     //该方法为了对比最终增强和后置增强的效果,还有就是异常抛出增强的效果
 7     public void error(){
 8         int result=5/0;//伪造一个异常
 9         System.out.println("我是异常方法");
10     }
11 }

创建通知类代码

 1 @Aspect//标注这个类是一个切面
 2 @Component//作用与@Service作用相同
 3 public class Advice implements AfterAdvice {
 4     //标注一个切点,这个方法只是为了写一个表达式,什么都不用做
 5     @Pointcut("execution(* com.cn.service.*.*(..))")
 6     public void pointcut(){}
 7     //前置增强
 8     @Before("pointcut()")
 9     public void before(JoinPoint jp){
10         System.out.println("我是方法"+jp.getSignature().getName()+"的前置增强!");
11     }
12     //后置增强
13     @AfterReturning(value = "pointcut()",returning = "obj")
14     public void afterReturning(JoinPoint jp,Object obj){
15         System.out.println("我是方法"+jp.getSignature().getName()+"的后置增强!"+",返回值为"+obj);
16     }
17     //环绕增强
18     @Around("pointcut()")
19     public void around(ProceedingJoinPoint jp) throws Throwable {
20         System.out.println("我是环绕增强中的前置增强!");
21         Object proceed = jp.proceed();//植入目标方法
22         System.out.println("我是环绕增强中的后置增强!");
23     }
24     //异常抛出增强
25     @AfterThrowing(value = "pointcut()",throwing = "e")
26     public void error(JoinPoint jp,Exception e){
27         System.out.println("我是异常抛出增强"+",异常为:"+e.getMessage());
28     }
29     //最终增强
30     @After("pointcut()")
31     public void after(JoinPoint jp){
32         System.out.println("我是最终增强");
33     }
34 }

核心配置文件applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 6     <!--包扫描-->
 7     <context:component-scan base-package="com.cn"/>
 8     <!--开启ioc注解-->
 9     <context:annotation-config/>
10     <!--开启aop注解-->
11     <aop:aspectj-autoproxy/>
12 </beans>

编写测试类代码

 1 public class App 
 2 {
 3     public static void main( String[] args )
 4     {
 5         ApplicationContext ac=new ClassPathXmlApplicationContext("/applicationContext.xml");
 6         DoSome bean = ac.getBean("dosome",DoSome.class);
 7         bean.dosome();
 8         //bean.error();
 9     }
10 }

后续补充纯注解配置方式,更方便一些

猜你喜欢

转载自www.cnblogs.com/Tiandaochouqin1/p/10423980.html