一、什么是AOP

面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
在不影响原来功能代码的基础上,使用动态代理加入自己需要的一些功能(比如权限的验证,事务的控制,日志的记录等等),移除之后,并不影响原来的功能
面向切面编程是通过动态代理实现的,是对面向对象思想的补充。
可以提供声明式的事务管理。

aop的advice有哪些
1)before:在执行切入的方法之前,执行代码
2)after returning:在执行切入的方法正常执行(没有异常)之后,执行代码
3)after throwing:在执行切入的方法发生异常的时候,执行代码
4)after:在执行切入的方法无论是否发生异常,都必须最后执行代码

二、配置切点和切面

1)找到需要加事务的方法(方法的定位,可以类似于通配符来定位)
execution(public * cn.com.bochy.dao.impl.UserDaoImpl.insertUser(..))
开发中,事务的处理是在service层处理的,所以必须切入service层
execution(public * cn.com.bochy.service.impl.*.*(..))
2)找到之后,在方法开始之前,需要加上事务
对应advice:before
3)在方法运行中如果有异常,回滚
对应advice:after throwing
4)在方法运行中没有异常,提交
对应advice:after returning
5)无论是否有异常,关闭释放资源
对应advice:after

<!-- 注解方式完成dao层和service层的自动注入 -->
<context:component-scan base-package="com.zy"></context:component-scan>
<!-- 打开动态代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> <!-- <bean name="myaop" class="com.zy.aop.MyAop"></bean> 配置切点和切面
<aop:config>
配置切点 *返回值任意 ..表示参数任意
以service中的login方法为切点 返回值任意 参数任意
<aop:pointcut expression="execution(public * com.zy.dao.impl.UserDaoImpl.login(..))" id="mypoint" />
配置切面
<aop:aspect ref="myaop"> 在切面上配advice 执行时机不同
<aop:before method="mybefore" pointcut-ref="mypoint"/>
<aop:after method="myafter" pointcut-ref="mypoint"/>
<aop:after-returning method="myafter2" pointcut-ref="mypoint"/>
<aop:after-throwing method="myafter3" pointcut-ref="mypoint"/>
</aop:aspect> </aop:config> -->

切面类

package com.zy.aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Component
@Aspect
public class MyAop {
//写方法
Logger log = Logger.getLogger(this.getClass()); @Before("mypoint()")
public void mybefore(){ System.out.println("该方法在登陆之前执行");
log.info("有人准备登录系统");
} @After("mypoint()")
public void myafter(){
System.out.println("该方法在登陆之后执行");
log.info("系统完成一次登录过程");
}
@AfterReturning("mypoint()")
public void myafter2(){
System.out.println("切点无异常后会执行");
log.info("系统登录无异常");
}
@AfterThrowing("mypoint()")
public void myafter3(){
System.out.println("切点有异常后会执行");
log.info("系统登录有异常");
} //定义切点--写注解---写在某个方法上
@Pointcut("execution(public * com.zy.dao.impl.UserDaoImpl.login(..))")
public void mypoint(){}//傀儡 无任何意义 }

Test类

package test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.zy.service.impl.UserServiceImpl; public class MyTest2 {
@Test
public void show(){
ClassPathXmlApplicationContext cxc = new ClassPathXmlApplicationContext("spring.xml");
//调用service再切service就会出问题
UserServiceImpl bean = cxc.getBean("userServiceImpl", UserServiceImpl.class);
//默认类名首字母小写
bean.login("小白", "123456"); //test[login()] ---- service----dao
} }

SpringMVC返回json

@ResponseBody
@RequestMapping("/get")
public Object getUser(){//研究springMVC下怎样让一个方法返回json格式数据 return us.getUserone();
}
//{"uid":2,"username":"rose","password":"654321","address":"韩国","uu":null}
//1到springMVC json包
//2spring.xml中配置 <mvc:annotation-driven ></mvc:annotation-driven>(没有这个会406)
//3controller中方法返回值改为Object
//4在controller中方法上加@ResponseBody

Spring学习笔记2的更多相关文章

  1. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  2. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  3. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  4. Spring学习笔记2——表单数据验证、文件上传

    在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...

  5. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  6. 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面

    作者:ssslinppp       异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...

  7. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传

    作者:ssslinppp       1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...

  8. 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat

    作者:ssslinppp       1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...

  9. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  10. 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

随机推荐

  1. 20210107 - python 的Excel自动化

    1.前置条件:用python, 开发工具pycharm 2.安装包: pip install openpyxl,  该包支持:xlsx, 但是不支持xlrd.xlwt格式的文件 3.概念介绍: 一个e ...

  2. OBKoro1的2020年年终总结

    前言 一晃眼2020年马上就要过去了,今年感觉过的特别快. 工作已经三年了,之前都没有写过年终总结,结果造成了下面这个现象: 回首过去的几年,记忆已经很模糊了,需要很用力才能想起过去一部分往事. 人生 ...

  3. 一文彻底理解IO多路复用

    在讲解IO多路复用之前,我们需要预习一下文件以及文件描述符. 什么是文件 程序员使用I/O最终都逃不过文件. 因为这篇同属于高性能.高并发系列,讲到高性能.高并发就离不开Linux/Unix,因此这里 ...

  4. 【JavaWeb】Filter 过滤器

    Filter 过滤器 简介 Filter 过滤器是 JavaWeb 三大组件之一 Filter 过滤器是 JavaEE 的规范,也就是接口 Filter 过滤器的作用是 拦截请求,过滤响应 拦截请求的 ...

  5. 【剑指 Offer】03.1.不修改数组找出重复的数字

    找出数组中重复的数字. 在一个长度为 n + 1 的数组 nums 里的所有数字都在 1-n 的范围内.所以数组中至少有一个是重复的.请找出数组中任意一个重复的数字. 示例 1: 输入: [2, 3, ...

  6. MongoDB的管理-深度长文

    (1) 启动和停止MongoDB: Ubuntu18下启动关闭MongoDB 启动MongoDB: 方法一: systemctl start mongod.service 方法二: 在MongoDB的 ...

  7. 记汉化zabbix后图形界面没有任何汉字的问题

    1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...

  8. 【Linux】 多个会话同时执行命令后history记录不全的解决方案

    基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...

  9. C#中foreach的实现原理

    C#中foreach的实现原理 在探讨foreach如何内部如何实现这个问题之前,我们需要理解两个C#里边的接口,IEnumerable 与 IEnumerator. 在C#里边的遍历集合时用到的相关 ...

  10. HTML&CSS:构建网站不能不说的那些事儿

    很高兴你能看到这个专栏!俗话说得好,相逢即是缘分,没准你和我在上一世也曾有过五百次的回眸,才得此一面.说的有点恶心了,咱还是书归正传,说说这个专栏吧. 这个专栏主要讲的是 HTML 和 CSS 的页面 ...