1、Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术。Aop是oop的延续,是软件开发中的 一个热点,也是Spring框架中一个重要的内容。是函数式编程的一个衍生范例,利用Aop可以对业务逻辑各个部分进行分割,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用行,提高了开发效率。简单的说就是把我们程序中的重复代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上已有的方法进行增强,(使用动态代理的方式实现)
相关术语
JoinPoint:链接点 那些被拦截到的点,在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
Pointcut:切入点 是指我们要对哪些JoinPont进行拦截的定义
Advice:通知/增强 拦截到Joinpoint之后所要做的事情就是通知
通知类型:前置通知、后置通知、异常通知、最终通知、环绕通知
Introduction:引介 是一种特殊的通知,在不修改类代码的前提下,Introduction可以在运行期为类动态的添加一些方法或field
Target:目标对象,代理的目标对象
Weaving织入 是指把增强应用到目标对象来创建新的代理对象的过程,spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入
Proxy:代理,一类类被Aop织入增强后,就产生一个结果代理类
Aspect:切面 是切入点和通知(引介)的结合
在 spring 中,框架会根据目标类是否实现了接口来决定采用哪种动态代理的方式。
基于XMl的AOP步骤
1、创建Maven项目引入spring坐标
4.0.0 com.mingqi SpringIOCpom 1.0-SNAPSHOT org.springframework spring-context5.0.2.RELEASE org.aspectj aspectjweaver1.8.7 junit junit4.12 test
2、创建业务层接口:
package com.mingqi.services;
public interface IAccountService {
void saveAccount();
void updateAccount(int id);
int deleteAccount();
}
3.创建业务层实现类
package com.mingqi.services.impl;
import com.mingqi.services.IAccountService;
public class AccountServicesImpl implements IAccountService {
public void saveAccount() {
System.out.println("执行了保存");
}
public void updateAccount(int id) {
System.out.println("执行了更新"+id);
}
public int deleteAccount() {
System.out.println("执行了删除");
return 0;
}
}
4、创建工具类
package com.mingqi.utils;
import org.aspectj.lang.ProceedingJoinPoint;
public class Logger {
public void beforePrintLog(){
System.out.println("Logger类中的pringLog方法开始记录日志了。。。");
}
public void afterReturningPrintLog()
{
System.out.println("后置通知Logger类中的beforePrintLog方法开始记录日志了。。。");
}
public void afterThrowingPrintLog()
{
System.out.println("异常通知Logger类中的afterThrowingPrintLog方法开始记录日志了。。。");
}
public void afterPrintLog()
{
System.out.println("最终通知Logger类中的afterPrintLog方法开始记录日志了。。。");
}
public Object aroundPringLog(ProceedingJoinPoint pjp){
Object rtValue = null;
try{
Object[] args = pjp.getArgs();//得到方法执行所需的参数
System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");
rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)
System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");
return rtValue;
}catch (Throwable t){
System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");
throw new RuntimeException(t);
}finally {
System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");
}
}
}
5、创建bean配置文件
6、创建测试类
package com.mingqi.test;
import com.mingqi.services.IAccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringIoc {
@Test
public void TestAccount()
{
ApplicationContext ac= new ClassPathXmlApplicationContext("beam.xml");
IAccountService accountService=(IAccountService) ac.getBean("accountSevice");
accountService.saveAccount();
accountService.updateAccount(22);
accountService.deleteAccount();
}
}
总结
到此这篇关于Spring中基于xml的AOP的详细步骤的文章就介绍到这了,更多相关Spring基于xml的AOP内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!



