您的位置:首页 > 编程语言

AOP面向切面编程

2017-08-22 19:16 155 查看
spring的三大核心:控制反转、依赖注入、面向切面编程。

控制反转:对象A依赖对象B,如果收到把对象B给new出来,会使代码高度耦合,产生硬编码。为了避免这种情况,通过注解或配置XML将bean托管给spring管理。由spring进行bean实例的创建

依赖注入:当spring把对象B创建出来后,需要设置到对象A中,这一过程称为依赖注入

面向切面编程:什么是面向切面编程?在运行时,动态地将代码织入到指定类的指定方法、指定位置上的编程思想就是面向切面的编程。一般而言,我们管织入到指定类指定方法的代码片段称为切面,而织入到哪些类、哪些方法则叫切入点。对于面向切面编程这里举个实例:在dao层对数据库操作时,都使用到了事务,在对数据库操作时都可能抛出异常,当抛出异常时都要做回滚操作。为避免在dao层对数据库操作时都要捕获异常做回滚,创建一个切面实现做回滚操作功能,然后指定切点,当发生异常时实现切面功能。对于切面代码块什么时候的调用,这里有做一些下列举:

AOP配置元素

描述

<aop:advisor>

定义AOP通知器

<aop:config>

顶层的AOP配置元素

<aop:pointcut>

定义切点

<aop:aspect>

定义切面

<aop:after-returning>

定义AOP after-returning通知

<aop:after-throwing>

定义after-throwing通知

<aop:after>

定义AOP后置通知

<aop:before>

定义AOP前置通知

当使用面向切面进行编程时,需要做XML文件配置声明哪些类是切面,哪些方法是切点,或者需要添加注解来做声明。做XML配置不再举例,这里以注解方式来说明一下面向切面的编程

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class SleepHelper {

public SleepHelper(){
}

@Pointcut("execution(* *.sleep())")(切点)
public void sleeppoint(){}

@Before("sleeppoint()")
public void beforeSleep(){
System.out.println("睡觉前要脱衣服!");
}

@AfterReturning("sleeppoint()")
public void afterSleep(){
System.out.println("睡醒了要穿衣服!");
}

}

用@Aspect的注解来标识切面,注意不要把它漏了,否则Spring创建代理的时候会找不到它,@Pointcut注解指定了切点,@Before和@AfterReturning指定了运行时的通知,注

意的是要在注解中传入切点的名称
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: