Spring @Aspect实现切面编程
2015-10-08 09:17
501 查看
参考:http://blog.csdn.net/cdl2008sky/article/details/6268628
参考:http://www.360doc.com/content/12/0602/15/7656232_215420487.shtml 中的proxy-target-class
Spring @Aspect实现切面编程:
XML:
AppBean:
切面类:
接口和类:
参考:http://www.360doc.com/content/12/0602/15/7656232_215420487.shtml 中的proxy-target-class
Spring @Aspect实现切面编程:
XML:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 这个声明会创建AnnotationAwareAspectJAutoProxyCreator,进行切面Bean的代理 --> <aop:aspectj-autoproxy /> <!-- 必须将切面类声明为一个Bean --> <bean id="audience" class="com.stono.sprtest3.Audience"></bean> <bean id="singer" class="com.stono.sprtest3.Singer"></bean> </beans>
AppBean:
package com.stono.sprtest3; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppBeans11 { @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("appbeans11.xml"); Performer singer = (Performer) context.getBean("singer"); singer.perform(); } }
切面类:
package com.stono.sprtest3; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class Audience { // 为一个类进行切点的声明也是可以的; // @Pointcut("execution(* com.stono.sprtest3.Singer.perform()(..))") @Pointcut("execution(* com.stono.sprtest3.Performer.perform(..))") public void pointcut() {// 方法名称就是一个标记 } @Before("pointcut()") public void takeSeat() { System.out.println("com.stono.sprtest2.Audience.takeSeat()"); } @Before("pointcut()") public void turnOffPhone() { System.out.println("com.stono.sprtest2.Audience.turnOffPhone()"); } @AfterReturning("pointcut()") public void applaud() { System.out.println("com.stono.sprtest2.Audience.applaud()"); } @AfterThrowing("pointcut()") public void refund() { System.out.println("com.stono.sprtest2.Audience.refund()"); } @Around("pointcut()") public void watchPerformance(ProceedingJoinPoint joinPoint) { try { System.out.println("The audience is taking their seats."); System.out.println("The audience is turning off their cellphones."); long start = System.currentTimeMillis(); joinPoint.proceed(); long end = System.currentTimeMillis(); System.out.println("CLAP CLAP CLAP CLAP CLAP CLAP"); System.out.println("The performance took " + (end - start) + " milliseconds."); } catch (Throwable e) { e.printStackTrace(); System.out.println("Boo! We want our money back!"); } } }
接口和类:
package com.stono.sprtest3; public interface Performer { void perform(); } package com.stono.sprtest3; public class Singer implements Performer { public void perform() { System.out.println("com.stono.sprtest3.Singer.perform()"); } }
相关文章推荐
- ASP.NET中HTML页面的访问验证设置方法
- ASP.NET动态网站制作(6)-- JS(1)
- 关于ASP.NET MVC的Html.BeginForm()方法
- Codeforces 583A Asphalting Roads
- ASP.NET MVC中URL末尾斜杠的实现
- 关于asp.net和iis的进程/线程问题,假如网站有1000个人访问,会产生多少个进程/线程啊
- A. Asphalting Roads
- 在ASP.NET MVC中对表进行通用的增删改
- asp.net mvc 初学数据库实例
- asp.net(C#)页面事件顺序
- 让用户做测试员 利用IIS自定义错误页
- ASP.NET MVC3 入门指南之数据验证[源码RAR下载]
- 模型(Model)– ASP.NET MVC 4 系列
- asp.net mvc Model验证中MetadataType的应用
- 《Metasploit渗透测试魔鬼训练营》 之 文件包含
- 《Metasploit渗透测试魔鬼训练营》 之 命令注入
- 《Metasploit渗透测试魔鬼训练营》 之 XSS
- 《Metasploit渗透测试魔鬼训练营》 之 SQL注入
- 《Metasploit渗透测试魔鬼训练营》 之 工具整理
- 《Metasploit渗透测试魔鬼训练营》 之 信息收集工具