Spring AOP Aspect的简单实现(基于XML)
第一步:导包
第二步:实现类和切面类
Service("userService")
public class IUserviceImpl implements IUserService{
private  String name ;
    @Override
public void add(User user) {
    }
@Override
public void addUser() {
System.out.println("添加用户");
    }
@Override
public void updateUser() {
System.out.println("更新用户");
    }
@Override
public int deleteUser(int id) {
System.out.println("通过id删除用户");
        return 1;
    }
@Override
public void deleteUser() {
System.out.println("删除用户");
   //     int i = 10/0;
}
public String getName() {
return name;
    }
public void setName(String name) {
this.name = name;
    }
@Override
public void add() {
System.out.println("创建用户");
    }
}
@Component //AOP底层
@Aspect
public class MyAspect {
@Before("execution(* com.zz.service.UserServiceImpl.*(..))")
public void myBefore(JoinPoint joinPoint){
System.out.println("1 前置通知..."+joinPoint.getSignature().getName());
}
public void myAfterReturning(){
System.out.println("4 后置通知...");
}
/* public Object myAround() throws Throwable {
return myAround();
}*/
public Object myAround( ProceedingJoinPoint pjp) throws Throwable {
System.out.println("2环绕通知...开启事务");
System.out.println(pjp.getSignature().getName());//切入点就方法名
//放行
Object retObj = pjp.proceed();
System.out.println("3提交事务...提交事务");
return retObj;
}
public void myAfterThrowing( JoinPoint jp,Throwable e) {
System.out.println("异常通知..." + jp.getSignature().getName() + "===" + e.getMessage());
}
public void myAfter(JoinPoint jp){
System.out.println("最终通知 ");
}
第三步:spring的xml配置
<!-- 配置UserService-->
<bean id="userService" class="com.zz.service.UserServiceImpl"></bean>
<!-- 配置切面类对象-->
<bean id="myAspect" class="com.zz.aspect.MyAspect"></bean>
<aop:config >
<!-- 切入点:2
expression:表达式
每个service的方法前面都开启事务和结束事务
AOP:用于事务配置&日志记录
-->
<aop:aspect ref="myAspect"> //指定切面类位置
<aop:pointcut id="myPointcut" expression="execution(* com.zz.service.UserServiceImpl.*(..))"/> //指定切入点
<!-- 配置前置通知...-->
<aop:before method="myBefore" pointcut-ref="myPointcut" />
<!-- 配置后置通知...-->
<aop:after-returning method="myAfterReturning" pointcut-ref="myPointcut" />
<!-- 配置异常通知..throwing="e" 值,是方法的参数名.-->
<aop:after-throwing method="myAfterThrowing" pointcut-ref="myPointcut" throwing="e" />
<!--配置环绕通知-->
<aop:around method="myAround" pointcut-ref="myPointcut"></aop:around>
<!--配置最终通知-->
<aop:after method="myAfter" pointcut-ref="myPointcut"></aop:after>
</aop:aspect>
</aop:config>
第四步:测试
@Test
public void test()throws Exception{
  ApplicationContext applicationContext =new ClassPathXmlApplicationContext("Beans16.xml");
        //从spring 容器获取userservice 对象
IUserService userService1= (IUserService) applicationContext.getBean("userService");
        userService1.deleteUser();
    }
}

| 
 | 
 AOP联盟规范  | 
| 
 | 
 AOP实现  | 
| 
 | 
 规范  | 
| 
 | 
 aspectj实现  | 
Spring AOP Aspect的简单实现(基于XML)的更多相关文章
- Spring AOP Aspect的简单实现(基于注解)
		
第1步:声明使用注解 <!-- 配置扫描注解--> 扫描包的位置<context:component-scan base-package="com.zz"/> ...
 - Spring声明式事务管理(基于XML方式实现)
		
--------------------siwuxie095 Spring 声明式事务管理(基于 XML 方式实现) 以转账为例 ...
 - Spring AOP就是这么简单啦
		
前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:S ...
 - Spring系列(四):Spring AOP详解和实现方式(xml配置和注解配置)
		
参考文章:http://www.cnblogs.com/hongwz/p/5764917.html 一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程, ...
 - Spring AOP注解形式简单实现
		
实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi ...
 - Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP
		
基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...
 - Spring 之定义切面尝试(基于 XML)
		
有些场景下只能基于 XML 来定义切面. [Spring 之定义切面尝试] 1.XML 下定义切面(首先是要有一个对应的类...显然要比基于注解的麻烦) <?xml version=" ...
 - Spring AOP(aspect oriented programming) 转载
		
1.面向切面的基本原理 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 01.什么是面向切面编程 横切关注点:影响应用多处的功能 ...
 - Spring Boot -- Spring AOP原理及简单实现
		
一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...
 
随机推荐
- C++ 结构体案例2  升序打印数组中的元素
			
1 //结构体案例 2 2 #include<iostream> 3 #include<string> 4 #include<ctime> 5 using name ...
 - 【原创】在macOS Big Sur (Silicon M1, ARM)中配置ASP运行环境
			
亲测有效,转载请附原文地址. 一,安装Parallels Desktop,注意选择支持ARM的版本. 二,注册 Windows Insider Preview Downloads 账号,通过以下链接下 ...
 - Blazor 模板化组件开发指南
			
翻译自 Waqas Anwar 2021年4月15日的文章 <A Developer's Guide To Blazor Templated Components> [1] 在我之前的一篇 ...
 - solr7.4.0+mysql+solrj(简而优美)
			
目录: 1 solr7部署+创建核心2 solr mysql 连接 2.1 导入相关 jar包 2.2 配置连接信息 2.3 配置中文分析器3 solrj JAVA客户端应用 3.1 solrj 构建 ...
 - spring-session-data-redis反序列化问题
			
springCloud项目,采用springSession,用户模块同时引入了spring-cloud-starter-security,在其他模块request.getSession()的时候抛了以 ...
 - Azure Bicep 开发利器
			
Bicep 是一种用于声明式部署Azure资源的领域特定语言.它的目标是通过更清晰的语法.改进的类型安全性.以及对模块化和代码重用的更好支持,彻底简化编写体验. Bicep 其实是对 ARM 模板的透 ...
 - Vue CLI安装报错 npm ERR! Exit handler never called!
			
安装Vue CLI时报错: npm install –g vue-cli 试了四种办法 1.把全局安装-g放到后面 npm install @vue/cli –g 2.命令行输入 npm 缓存清理命令 ...
 - SQL 练习15
			
检索" 01 "课程分数小于 60,按分数降序排列的学生信息 SELECT Student.* ,SC.score from Student,SC WHERE sc.cid = ' ...
 - NPM使用方法
			
什么是npm npm是nodejs的包管理器,在当今工程化前端开发过程中,npm包起着举足轻重的作用. 安装npm 作为nodejs的包管理器,npm随着nodejs一起安装的.通常情况下,当我们安装 ...
 - 深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存
			
摘要:鸿蒙轻内核M核新增支持了多段非连续性内存区域,把多个非连续性内存逻辑上合一,用户不感知底层的不同内存块. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dynamic Mem ...
 
			
		