spring 的AOP
来源:互联网 发布:施耐庵子孙 哑巴 知乎 编辑:程序博客网 时间:2024/06/16 21:55
AOP 面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式。
AOP和OOP互为补充,面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。可以这样理解:面向对象编程是从静态角度考虑程序结构,而面向切面编程则是从动态角度考虑程序运行过程。
假如三个类共用三个方法时,如果需要修改方法中的内容时,只需要修改方法的内容即可。通过这种方式,大大降低了软件后期维护的复杂度。
这样做能够解决大部分的应用场景,但程序希望实现更好的解耦,希望三个类中的三个方法彻底与方法分离。应该如何解决。这就需要用到切面编程。只需要实现新的方法,无需三个类中显示调用新方法,系统会自动在三个类中调用这个新方法。
javaee应用中,常常通过aop来处理一些具有横切性质的系统服务,如事物管理,安全检查,缓存,对象池管理等。
使用AspectJ实现AOP:
1 安装AspectJ : 在cmd窗口中使用命令进行安装:
java -jar xxxx(aspectj包名) ,之后就下一步。
2 AspectJ使用入门:
bin:该路径下存放了aj、aj5 、ajc、ajdoc、ajbrowser等命令,其中ajc是最常用的,它的作用类似于javac,用于对普通的java类进行编译时增强。
docs:该路径存放了AspectJ的使用说明,参考手册,api文档
lib:该路径下的4个jar文件时AspectJ的核心类。
具体实现:
Hello.java
public class Hello{public void foo(){System.out.println("执行hello组件的foo()方法");}public int addUser(String name,String pass){System.out.println("执行hello组件的addUser添加用户:"+name);return 20;}}World.java
public class World{public void bar(){System.out.println("执行world组件的bar()方法");}}
测试类AspectJTest.java
public class AspectJTest{public static void main(String[] args){Hello hello = new Hello();hello.foo();hello.addUser("孙悟空","7788");World world = new World();world.bar();}}使用javac进行编译:
添加一个特殊的类:AuthAspect.java
public aspect AuthAspect{before():execution(* *.*(..)){System.out.println("模拟进行权限检查");}}
LogAspect.java
public aspect LogAspect{pointcut logPointcut():execution(* *.*(..));after():logPointcut(){System.out.println("模拟记录日志。。。");}}
使用命令运行程序,显示结果为:
这就是使用aop实现的。在没有修改方法,类中的方法中的任何信息,就给类添加新的方法。
- AOP、Spring的AOP
- spring(AOP)Aop的概念
- spring的的AOP
- Spring的AOP实现
- spring的AOP介绍
- Spring的aop
- 6.2 Spring的AOP
- Spring 的AOP运用
- spring aop的理解
- spring aop的讲解
- spring的aop原理
- spring的aop
- spring的AOP配置
- Spring AOP的应用
- Spring的AOP
- Spring的AOP配置
- Spring的aop
- Spring Aop的应用
- absolute问题
- Optical Flow学习心得
- Deep Learning学习 - VGG-Face网络人脸识别
- C++中引用的使用总结
- 自定义material design 风格的Dialog
- spring 的AOP
- MongoDB线上实践指南-基础篇之支撑百亿级访问(四)
- mybatis中循环嵌套
- js跨域调用报表
- java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
- Ubuntu系统下手动安装mysql及开启外部访问
- 配置一个适合自己使用习惯的Android studio
- 如何正确获取百度定位Keystore,解决百度地图不显示问题
- UIWebView (NSURLProtocol)拦截js、css