初学AOP

src\dayday\Count.java

package dayday;

import org.springframework.stereotype.Component;

/** * Created by I am master on 2016/12/3. */@Componentpublic interface Count {   int add(int i, int j);   int mul(int i, int j);   int div(int i, int j);   int sub(int i, int j);}

src\dayday\CountImpl.java

package dayday;

import dayday.Count;import org.springframework.stereotype.Component;

/** * Created by I am master on 2016/12/3. */@Componentpublic class CountImpl implements Count {    public int add(int i,int j){        int result=i+j;        return result;    }    public int sub(int i,int j){        int result=i-j;        return result;    }    public int mul(int i,int j){        int result=i*j;        return result;    }    public int div(int i,int j){        int result=i/j;        return result;    }}

src\dayday\LogginAspect.java

package dayday;

import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.Component;

import java.util.Arrays;import java.util.List;

/** * Created by I am master on 2016/12/3. */@Aspect@Componentpublic class LogginAspect {    @Before("execution(public int dayday.Count.add(int,int))")    public  void beforeMethod(JoinPoint joinpoint){        String methodName=joinpoint.getSignature().getName();        List<Object>args= Arrays.asList(joinpoint.getArgs());        System.out.println("method is "+methodName+" begins with "+args);    }    @After("execution(public int dayday.Count.add(int,int))")    public void afterMethod(){        System.out.println("After...");    }    @AfterReturning(value="execution(public int dayday.Count.add(int,int))",returning = "result")    public void afterReturning(JoinPoint joinpoint,Object result){         String methodName=joinpoint.getSignature().getName();         System.out.println("method is "+methodName+" result is "+result);    }    @AfterThrowing(value="execution(public int dayday.Count.div(int,int))",throwing ="exception")    public void afterThrowing(JoinPoint joinpoint,Exception exception){        String methodName=joinpoint.getSignature().getName();        System.out.println("method is "+methodName+" occurs "+exception);    }    @Around("execution(public int dayday.Count.add(int,int))")    public Object aroundMethod(ProceedingJoinPoint pjd){

Object result = null;        String methodName = pjd.getSignature().getName();

try {            //前置通知            System.out.println("The method " + methodName + " begins with " + Arrays.asList(pjd.getArgs()));            //执行目标方法            result = pjd.proceed();            //返回通知            System.out.println("The method " + methodName + " ends with " + result);        } catch (Throwable e) {            //异常通知            System.out.println("The method " + methodName + " occurs exception:" + e);            throw new RuntimeException(e);        }        //后置通知        System.out.println("The method " + methodName + " ends");        return result;    }}

src\dayday\Main.java

package dayday;

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;

/** * Created by I am master on 2016/12/3. */public class Main {    public static void main(String[] args){        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");        Count c = ctx.getBean(Count.class);        int result=c.add(8,3);    }}

src\beans.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">       <context:component-scan base-package="dayday"/>       <!--使AspectJ注释起作用,自动为匹配的类生成代理对象-->       <aop:aspectj-autoproxy/></beans>
时间: 2024-10-27 11:49:36

初学AOP的相关文章

spring boot 从开发到上线(三)—AOP 异常监控、上报

在做这个项目的期间,看到一篇很有启发性的文章<程序员你为什么这么累>.对于初级程序员来说,拿到需求,第一反应是用什么技术来尽快的完成任务,这本身并没有问题.但长此以往,不仅被需求的更改搞得疲惫不堪,更被重复的工作消磨了激情.如果你也有类似的烦恼,不妨看看此文,结合日常工作,体会下文中提到的先有思想再有技术. ~~~~~~~~ge ge ge ge~~~~~~~~~~~ 正文: 到目前为止,我们的项目线上运行良好,但每个人都知道,它一定有 bug.当异常产生,就需要及时去修复.然而我们不可能实时

Spring初学之annotation实现AOP前置通知和后置通知

实现两个整数的加减乘除,并在每个计算前后打印出日志. ArithmeticCalculator.java: package spring.aop.impl; public interface ArithmeticCalculator { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } ArithmeticCalculatorImpl.java: package sp

Spring初学之annotation实现AOP前置通知、后置通知、返回通知、异常通知。

实现两个整数的加减乘除.在执行每个方法之前打印日志. ArithmeticCalculator.java: package spring.aop.impl; public interface ArithmeticCalculator { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } ArithmeticCalculatorImpl.java: package sp

Spring初学之xml实现AOP前置通知、后置通知、返回通知、异常通知等

实现两个整数的加减乘除,在每个方法执行前后打印日志. ArithmeticCalculator.java: package spring.aop.impl.xml; public interface ArithmeticCalculator { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } ArithmeticCalculatorImpl.java: packag

Spring初学之spring的事务管理xml

所有的java类都是用的上一篇文章:Spring初学之spring的事务管理 不同的是,这时xml配置事务,所以就要把java类中的那些关于spring的注解都删掉,然后在xml中配置,ApplicationContext.xml如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans&q

初学Spring有没有适合的书

初学者之前没有阅读java框架源码的习惯.没有阅读过源码,知道整体流程么?知道依赖注入的概念么?知道aop么?知道其中用到了哪些设计模式么? 再说了,如果一上手就是源码?难道你没有注意到Spring的类有多少个吗?各个模块之间的组织模式么?所以我想说那些说看源码的人,完全是不负责任的.如果楼主能看懂源码就不会问这样的问题.个人推荐:Spring 3.x企业开发实战: 非常基础,但是对知识点都有涉及. 工作之后,因为公司也使用了Spring,所以为了工作,你不得不自己学,上班的时候好好的看已经写好

个人理解去搭建SSH三大框架spring管理配置文件(初学第一次接触SSH)

<bean id="dataSuorces" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDirver"/>(oracle数据库) <property name="url"

Spring框架之Spring AOP

一.基于注解管理的AOP 1.Spring配置文件 <!-- 配置自动扫描包,自动扫描Bean组件,切面类 --> <context:component-scan base-package="com.zhoujian.spring.anno,com.zhoujian.spring.test"> <!-- <context:include-filter type="annotation" expression="org.a

Spring AOP中pointcut expression表达式解析 及匹配多个条件

Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. args() @args() execution() this() target() @target() within() @within() @annotation 其中 execution 是用的最多的,其格式为: execution(modifiers-pat