Spring中AOP实例详解

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

SPRing中AOP实例详解

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

@Service

public class SimpleService {

public String getName(String name) {

System.out.println(get name is: + name);

return name;

}

}

定义切面和切点@Component

@aspect

public class L

ogAspect {

// 定义切点

@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 call

get 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: Bob

AfterReturnin增强处理--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_Bob

Around增强--around end

After增强// 无论是否发生异常都会 处理

@After(pointCut())

public void after() {

System.out.println(After增强--always do no matter what happen);

}

输出:

get name is: Bob

After增强--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);

}

}

原文地址:http://www.bkjia.com/javabc/1077751.html

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航