AOP

AOP(Aspect Oriented Programing,面向切面编程)用于在不侵入原有代码的基础上,为代码统一添加新功能,例如性能监控、日志记录、事务管理等。AOP的原理如图所示:
aop
其中:
1)连接点(Jointpoint),表示方法执行的某个位置,如方法调用前、方法调用后、方法抛出异常等;
2)通知(Advice),表示需要在某个连接点加入的新功能,通知包括以下5种类型:Before advice,After returning advice,After throwing advice,After (finally) advice,Around advice;
3)切入点(Pointcut),用于描述某些类的某些方法;
4)切面(Aspect),通知和切入点组成切面,通过切面实现在指定类的指定方法上,加入通知。

Spring AOP的4种实现

Spring AOP的实现基于动态代理,有以下4种实现方式:
1)基于Aspect注解;
2)基于aop标签配置;
3)基于ProxyFactoryBean;
4)基于DefaultAdvisorAutoProxyCreator。
通过一个例子分别说明上述4种实现方式。例子中包含TestService接口及其实现TestServiceImpl,TestServiceImpl的test方法输出“execute test method”:

main方法初始化Spring上下文,获取TestService实例,并执行test方法:

Spring上下文配置文件context.xml:

执行main方法,输出:

execute test method

以下通过Spring AOP,在test方法调用前和调用后,增加切面。

基于Aspect注解

新建类TestAspect:

context.xml修改为:

执行main方法,输出:

execute before advice
execute test method
execute after advice

基于aop标签配置

TestAspect:

context.xml修改为:

执行main方法,输出:

execute before advice
execute test method
execute after advice

基于ProxyFactoryBean

新建类TestAdvice,实现接口MethodBeforeAdvice、AfterReturningAdvice,重写before、afterReturning方法:

context.xml修改为:

执行main方法,输出:

execute before advice
execute test method
execute after advice

基于DefaultAdvisorAutoProxyCreator

与基于ProxyFactoryBean的实现相比,只需修改context.xml:

执行main方法,输出:

execute before advice
execute test method
execute after advice

标签:

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文