AOP (面向切面编程)-阿里云开发者社区

开发者社区> yichudu> 正文

AOP (面向切面编程)

简介: 软件由多个独立的模块组成,但有些功能分布于各个模块之中,比如记日志,这些功能叫做“横切关注点”,cross-cutting concerns。面向切面编程的目的就是——将横切关注点与模块的业务逻辑相分离。 概念 通知,advice 切面要做的事情称作通知。五种类型的通知:before:在方法运行之前。after:在方法运行之后,无论方法运行是否成功。after-returning
+关注继续查看

软件由多个独立的模块组成,但有些功能分布于各个模块之中,比如记日志,这些功能叫做“横切关注点”,cross-cutting concerns。面向切面编程的目的就是——将横切关注点与模块的业务逻辑相分离

概念

通知,advice

切面要做的事情称作通知。五种类型的通知:
before:在方法运行之前。
after:在方法运行之后,无论方法运行是否成功。
after-returning:在方法成功运行之后通知。
after-throwwing:在方法运行期间抛出异常时通知。
around::类似于jsp的Filter,切点的执行由around()方法调用。

切点,pointCut
切点定义了通知发生在何处。

切面,aspect
切面是“通知”和“切点”的结合。

AOP工具
有三大框架——AspectJ、JBossAOP、SpringAOP。通常用AspectJ。

常用类

org.aspectj.lang.ProceedingJoinPoint
实现around通知的方法的形参。
org.aspectj.lang.ProceedingJoinPoint.proceed()
调用切点方法,类似于jsp的Filter的chain.doFilter(request, response)。

例子

演员表演前观众要入席,表演后观众要鼓掌。

App.java

package com.likeyichu.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
	@SuppressWarnings("resource")
	public static void main(String[] args)
	{
		ApplicationContext ctx ;
		ctx=new ClassPathXmlApplicationContext("com/likeyichu/aop/beans.xml");
		Performer performer=ctx.getBean("performer", Performer.class);
		performer.perform();
	
	}
}
/*the audience is taking seats
the performer is performing
clap clap 
*/

Performer.java

package com.likeyichu.aop;

public class Performer{
	public void perform(){
		System.out.println("the performer is performing");
	}
}


Audience.java
package com.likeyichu.aop;

public class Audience {
	//表演之前要坐下
	public void takeSeats(){
		System.out.println("the audience is taking seats");
	}
	//表演成功,故障
	public void applause(){
		System.out.println("clap clap ");
	}
	//若表演失败 需要喝倒彩
	public void boo(){
		System.out.println("boo boo ");
	}
}

beans.xml

<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	 xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"  >
	<bean id="performer" class="com.likeyichu.aop.Performer"/>
	<bean id="audience" class="com.likeyichu.aop.Audience"/>
 <aop:config>
	<aop:aspect ref="audience">
		<aop:pointcut id="performance" expression="execution (* com.likeyichu.aop.Performer.perform(..))"/>
		<aop:before pointcut-ref="performance" method="takeSeats"/>
		<aop:after-returning pointcut-ref="performance" method="applause"/>
		<aop:after-throwing pointcut-ref="performance" method="boo"/>
	</aop:aspect>
</aop:config>
</beans>

maven依赖

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		<version>4.1.6.RELEASE</version>
	</dependency>
	<dependency>
			<groupId>org.aspectj</groupId>
		<artifactId>aspectjweaver</artifactId>
		<version>1.6.11</version>
	</dependency>
</dependencies>



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《OpenACC并行程序设计:性能优化实践指南》一 第1章 从串行编程到并行编程
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
975 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8456 0
Spring AOP基于配置文件的面向方法的切面
Spring AOP基于配置文件的面向方法的切面 Spring AOP根据执行的时间点可以分为around、before和after几种方式。 around为方法前后均执行 before为方法前执行 after为方法后执行 这里只对around的方式进行介绍。
713 0
想知道Python的 数据驱动编程框架 Da0tabot 是怎么运行?
前言 Da0tabot是用于 Web 爬虫、ETL、数据管道任务开发的高性能 Python 数据驱动编程框架。**特性:** 数据驱动编程框架 基于协程的并行 基于类型和内容的函数路由 安装: pip install -U databot Databot is.
873 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10249 0
Java编程技巧:小爬虫程序
本文介绍Java编程技巧之小爬虫程序的编程方法。     马萨玛索(http://www.masamaso.com/index.shtml)每天10点都会推出一折商品5件,就是秒购。男装质量还不错,所以就经常去抢,感觉手动太慢了,就写了一个小爬虫程序,让自己去爬,如果是金子页面(免费商品)就会自动打开,我就可以抢到了。
713 0
从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址   上回《从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探》咱们说到了依赖注入Autofac的使用,不知道大家对IoC的使用用怎样的感觉,我个人表示还是比较可行的,至少不用自己再关心一个个复杂的实例化服务对象了,直接通过接口就满足需求,当然还有其他的一些功能,我还没有说到,抛砖引玉嘛,大家如果有好的想法,欢迎留言,也可以来群里,大家一起学习讨论。
1244 0
+关注
619
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载