一. Spring的基于ApsectJ的注解的AOP开发

1. 编写目标类并配置

2. 编写切面类并配置

3. 在配置文件中打开注解的AOP开发

4. 在切面类上使用注解@Aspect

5. 前置通知@Before

6. 后置通知@AfterReturning

7. 注解配置切入点

8. 环绕通知@Around, 使用切入点

9. 异常抛出通知@AfterThrowing

10. 最终通知@After

二. AOP注解开发例子

1. 新建一个名为AOPAnnotation的Java项目

2. 创建UserDaoImpl.java类

package com.lywgames.dao.impl;public class UserDaoImpl{public void insert() {System.out.println("插入数据");}public void select() {System.out.println("查询数据");}public void update() {System.out.println("更新数据");throw new RuntimeException();}public int delete() {System.out.println("删除数据");return 1;}}

3. 创建AspectJAop.java切面类

package com.lywgames.aop;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;/*** 切面类*/
@Aspect
public class AspectJAop {@Before(value="execution(* com.lywgames.dao.impl.UserDaoImpl.insert(..))")public void beforeInsertCheck() {System.out.println("检测插入数据");}@AfterReturning(value="execution(* com.lywgames.dao.impl.UserDaoImpl.delete(..))", returning="result")public void afterDelete(int result) {System.out.println("删除后返回值:" + result);}@Around(value="AspectJAop.selectPoint()")public Object arround(ProceedingJoinPoint joinPoint) {try {System.out.println("查询前鼓鼓掌。");Object obj = joinPoint.proceed();System.out.println("查询后鼓鼓掌。");return obj;} catch (Throwable e) {e.printStackTrace();}return null;}@AfterThrowing(value="AspectJAop.updateExceptionPoint()", throwing="ex")public void updateException(Throwable ex) {System.out.println("更新发生了异常:" + ex.toString());}@After(value="AspectJAop.updateFinallyPoint()")public void myFinally() {System.out.println("更新方法发生了异常, 最终通知一样会执行完成。");}@Pointcut(value="execution(* com.lywgames.dao.impl.UserDaoImpl.select(..))")private void selectPoint() {}@Pointcut(value="execution(* com.lywgames.dao.impl.UserDaoImpl.update(..))")private void updateExceptionPoint() {}@Pointcut(value="execution(* com.lywgames.dao.impl.UserDaoImpl.update(..))")private void updateFinallyPoint() {}
}

4. 创建AopAction.java测试类

package com.lywgames.action;import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.dao.impl.UserDaoImpl;public class AopAction {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserDaoImpl userDaoImpl = context.getBean(UserDaoImpl.class);userDaoImpl.insert();userDaoImpl.delete();userDaoImpl.select();userDaoImpl.update();context.close();}
}

5. 在src目录下添加applicationContext.xml配置

6. 运行项目

011_AOP注解开发相关推荐

  1. mybatis使用注解开发

    mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...

  2. 使用注解开发SpringMVC详细配置教程

    目录 1.使用注解开发SpringMVC 1.新建一个普通的maven项目,添加web支持 2.在pom.xml中导入相关依赖 3.配置web.xml 4.编写SpringMVC配置文件 1. 自动扫 ...

  3. 【Spring Web MVC】Spring Web MVC 注解开发环境搭建

    为什么80%的码农都做不了架构师?>>>    1.创建maven项目 创建一个名为:springwebmvc-first的maven项目 2.添加依赖包 要使用springWebM ...

  4. AspectJ的注解开发AOP:异常抛出通知的学习

    AspectJ的注解开发AOP:异常抛出通知的学习 参考文章: (1)AspectJ的注解开发AOP:异常抛出通知的学习 (2)https://www.cnblogs.com/xiaolaha/p/1 ...

  5. 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发

    Spring注解开发 Spring是轻代码重配置的框架,配置比较繁重,会影响开发效率.这个时候可以通过注解开发,注解代替xml配置文件可以简化配置,提高开发效率. Spring原始注解 注解分为原始注 ...

  6. 07-XML 文件注解开发

    目录 注解 一.@Configuration @Import 二.@ComponentScan 三.@bean 1.Config完整代码 2.测试类 不论是 xml 开发或者注解开发都有一个问题是,我 ...

  7. SpringMVC学习03之使用注解开发SpringMVC

    复习 Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,无缝结合 约定优于配置 功能强大:RESTful.数据验证.格式化.本地化.主题等 简 ...

  8. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  9. 【Mybatis 之应用篇】2_配置解析、属性名问题、日志、分页和注解开发

    文章目录 Mabatis 四.配置解析 1.核心配置文件 2.environments(环境配置)☆ 3.properties(属性)☆ 4.typeAliases(类型别名)☆ 5.settings ...

最新文章

  1. Java中的深浅拷贝问题你清楚吗?
  2. Node.js的核心与红利
  3. 测试常用shell语句——数值,数组类型;函数创建
  4. 我们距离“云”还有多远?
  5. 聊聊Spring Cloud版本的那些事儿
  6. python中def main是什么意思_关于python:为什么使用def main()?
  7. linux重要的目录之proc和dev目录
  8. python基础之小数据池,is和==区别 编码问题
  9. vue 跨域请求js添加代码
  10. 匹配区县代码_行政区划代码查询
  11. C++实现 酒店管理系统
  12. vs无法启动程序系统找不到指定文件
  13. 实例化Servlet类异常404、500错误-解决方法
  14. 计算机网络atm功能,自考计算机网络实用技术考核知识点之ATM原理
  15. 美团内部讲座 | 清华大学崔鹏:因果推断技术最新的发展趋势
  16. python字符串截取规则_Python字符串截取
  17. 解决Expected all tensors to be on the same device, but found at least two devices, cuda:0
  18. 微信答题赚钱每题5元,搞兼职还不如做项目!
  19. 杂学——硬件:MIPI,压/速/频信号、并行转串行,SDI,PPM,单片机及开发板,交流直流,电容电阻,总线,RS485
  20. mysql-connector-java.jar包的下载教程

热门文章

  1. 笔记(用Python做些事情)--变量(日期和时间)
  2. 读写应用程序数据-SQLite3
  3. 流媒体服务器开发笔记(2)--RTCP协议介绍
  4. 基于认证的代理平台搭建配置squid-20130730
  5. Windows Phone 7 Tips (1)
  6. [转]浅谈:国内软件公司为何无法做大做强
  7. PostgreSQL非交互式键入密码
  8. qt build错误
  9. (转)Java并发编程:线程池的使用
  10. [LeetCode] 102. Binary Tree Level Order Traversal_Medium tag: BFS