一、什么是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. js 鼠标点击页面出现文字

    <script type="text/javascript"> var a_idx = 0; jQuery(document).ready(function($) { ...

  2. collection常用功能:

    collection常用功能: Collection是所有单列集合的父接口,因此在collection中定义了单列集合(List)和(Set)通用的一些方法.这些方法可用于操作所有的单列集合,方法如下 ...

  3. 美业黑科技 ▏肌肤管家SkinRun V3S智能肌肤测试仪,实现“护肤”私人定制

    肌肤如同身体,也需要定时的"健康检查",但仅凭肉眼难以窥见深层的肌肤问题.而现在,肌肤管家SkinRun前沿黑科技护肤测试仪--SkinRun V3S便能帮助用户对症下药.肌肤管家 ...

  4. 算法实验5--N皇后

    实验名称 回溯法解N皇后问题 实验目的 掌握回溯递归算法.迭代算法的设计与实现: 设计回溯算法求解: 分析算法的时间复杂度. 实验环境 操作系统:win 10; 编程语言:Java: 开发工具:IDE ...

  5. 设置.ignore后不生效解决方案

    /logs/*.lock /logs/*.log/reports/API_TEST_V*/.idea/ 设置.ignore后不生效解决方案: 在terminal中输入已下几行代码: git rm -r ...

  6. java8 stream api流式编程

    java8自带常用的函数式接口 Predicate boolean test(T t) 传入一个参数返回boolean值 Consumer void accept(T t) 传入一个参数,无返回值 F ...

  7. o_direct刷新方式和文件系统支持Direct i/o

    若让innodb使用o_direct刷新方式,文件系统支持Direct i/o 是非常重要的.为啥

  8. ps的参数解释

    [root@bogon ~]# ps axuUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user启动进程的用户 pid  表示进程标志 ...

  9. 【MySQL】CentOS7中使用systemctl工具管理启动和停止MySQL

    centos7以前版本,可以使用这个/etc/init.d/mysqld start 来启动mysql 但是centos7之后,通过systemctl start mysqld.service 这个要 ...

  10. 【System】进程,线程和任务之间的区别是什么?

    任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同达到某一目的的操作.例如,读取数据并将数据放入内存中.这 ...