首页 > 学院 > 开发设计 > 正文

Spring中AOP实例详解

2019-11-14 14:54:16
字体:
来源:转载
供稿:网友

SPRing中AOP实例详解

 

需要增强的服务

假如有以下service,他的功能很简单,打印输入的参数并返回参数。

@Servicepublic class SimpleService {    public String getName(String name) {        System.out.println(get name is:  + name);        return name;    }} 

定义切面和切点

@Component@aspectpublic class LogAspect {    // 定义切点    @Pointcut(within(com.ydoing.service..*))    // @Pointcut(execution(* com.ydoing.service.*.*(..)))    public void pointCut() {    } }

Before增强处理

    // 定义Before增强处理    // 在目标方法调用之前执行增强处理    @Before(pointCut())    public void before(JoinPoint jp) {        // 获取连接点传入参数        // Object args = jp.getArgs();        System.out.println(Before增强处理--execute before target method call);    } 

测试输出:

Before增强处理--execute before target method callget name is: Bob

AfterReturning增强

    // 在目标方法调用之后执行增强处理    @AfterReturning(pointcut = pointCut(), returning = ret)    public void afterReturning(JoinPoint jp, Object ret) {        System.out.println(AfterReturnin增强处理--execute after target method call, return value is : + ret);    }

测试输出:

get name is: BobAfterReturnin增强处理--execute after target method call, return value is :Bob

Around增强

    @Around(pointCut())    public void around(ProceedingJoinPoint jp) {        System.out.println(Around增强--around start...);        Object[] args = jp.getArgs();        // 修改目标方法传入的参数        args[0] = around_add_ + args[0];        try {            System.out.println(修改传入参数后执行输出:);            jp.proceed(args);        } catch (Throwable e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.println(Around增强--around end);    }

输出:

Around增强--around start...修改传入参数后执行输出:get name is: around_add_BobAround增强--around end

After增强

    // 无论是否发生异常都会 处理    @After(pointCut())    public void after() {        System.out.println(After增强--always do no matter what happen);    }

输出:

get name is: BobAfter增强--always do no matter what happen  

AfterThrowing增强

    @AfterThrowing(pointcut = pointCut(), throwing = ex)    public void afterThrowing(JoinPoint jp, Throwable ex) {        System.out.println(error is:  + ex);    }

这里没抛异常,就没有输出了

测试代码如下

@Configuration@EnableAspectJAutoProxy@ComponentScan(basePackages = com.ydoing.service,com.ydoing.aspect)public class AppConfig {    public static void main(String[] args) {        @SuppressWarnings(resource)        applicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);        SimpleService service = ctx.getBean(SimpleService.class);        service.getName(Bob);    }}

 

 

 

 QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表