栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring中基于xml的AOP的详细步骤

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring中基于xml的AOP的详细步骤

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
 SpringIOC
 pom
 1.0-SNAPSHOT
 
 
  org.springframework
  spring-context
  5.0.2.RELEASE
 
 
  org.aspectj
  aspectjweaver
  1.8.7
 
 
  junit
  junit
  4.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内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/133655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号