Spring学习笔记2
一、什么是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的更多相关文章
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Spring学习笔记2——表单数据验证、文件上传
在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面
作者:ssslinppp 异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat
作者:ssslinppp 1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
随机推荐
- Redis 5 配置 Redis sentinel(哨兵模式)
先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...
- Kioptrix Level 2
简介 Vulnhub是一个提供各种漏洞环境的靶场平台. 个人学习目的:1,方便学习更多类型漏洞.2,为OSCP做打基础. 下载链接 https://www.vulnhub.com/entry/kiop ...
- SAP中数据库表长度的界定
SAP中,如何查看表和关键字的长度?通过SE11菜单栏Extras->table width 可以看到.然而SAP在系统也会将表分类,特别是在可扩展的表维护视图中,分为如下几类 ult ...
- 全网最详细的PyCharm+Anaconda的安装。
目录 PyCharm的安装 一.下载安装包 1.安装网站 2.在导航栏输入网址回车 3.点击 DOWNLOAD. 4.它有专业版和社区版,我们下载社区版就可以使用了.(专业版要收费) 二.安装过程 5 ...
- pytorch——合并分割
分割与合并 import torch import numpy as np #假设a是班级1-4的数据,每个班级里有32个学生,每个学生有8门分数 #假设b是班级5-9的数据,每个班级里有32个学生, ...
- kafka项目经验之如何进行Kafka压力测试、如何计算Kafka分区数、如何确定Kaftka集群机器数量
@ 目录 Kafka压测 Kafka Producer(生产)压力测试 Kafka Consumer(消费)压力测试 计算Kafka分区数 Kafka机器数量计算 Kafka压测 用Kafka官方自带 ...
- linux--关于JVM CPU资源占用过高的问题排查
一.背景: 先执行一个java程序里面开了两个线程分别都在while循环做打印操作. # java -cp ./test-threads.jar com.spiro.Main 二.现象: 通过top命 ...
- Lua大量字符串拼接方式效率对比及原因分析
Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua字符串拼接消耗 https://blog.csdn.net/qq_26958473/article/detai ...
- epoll在fork子进程中的问题
epoll_create 创建的 文件描述符和其他文件描述符一样,是被fork出的子进程继承的,那也就是子进程可以使用这个epoll fd添加感兴趣的io(epoll_ctl),然后是可以影响到父进程 ...
- 原生js使用面向对象的方法开发选项卡实例教程
本教程通过js面向对象的方法来封装一个选项卡的实例,在实例中讲解js的面向对象如何实现功能. 一般封装好的选项卡程序,只需要一个div元素即可.其它元素都是通过json数据来生成,所以封装好的选项卡实 ...