Spring AOP

1.对AOP的理解 ——  分工来做各个部分,运行时候整合的思想

2.理解 面向过程,面向对象,面向切面 的思想

1)面向过程:房间装修时,准备装一个灯,就拉一根电线,连接灯。

2)面向对象:设计房间中哪些位置需要使用电线接口,然后在相应的位置设置电线接口,以备以后使用。

3)面向切面:装修房子,先设计需要在哪些地方装上电线接口,就将电线接口先设置好并且不打开接口,此处即为连接点,当此处电线切口确实需要使用时将接口打开插电器即为切入点。

方面:功能(登陆 日志)

目标:主要方面(登陆)

切面:切入点 植入 通知的综合体

连接点:可以插入副功能(日志)的地方

切入点:准备插入副功能的地方

通知:对副功能的封装对象

植入:将通知插入切入点

3.实现登陆和日志管理(使用Spring AOP)

1)LoginService   LogService   TestMain

2)用Spring 管理  LoginService 和 LogService 的对象

3)确定哪些连接点是切入点,在配置文件中

4)将LogService封装为通知

5)将通知植入到切入点

6)客户端调用目标



  1. <aop:config>
  2. <aop:pointcut expression="execution(* cn.com.spring.service.impl.*.*(..))" id="myPointcut"/>
  3. <!--将哪个-->
  4. <aop:aspect id="dd" ref="logService">
  5. <aop:before method="log" pointcut-ref="myPointcut"/>
  6. </aop:aspect>
  7. </aop:config>

execution(* * cn.com.spring.service.impl.*.*(..))

1)* 所有的修饰符

2)* 所有的返回类型

3)* 所有的类名

4)* 所有的方法名

5)* ..所有的参数名

1.ILoginService.java

  1. package cn.com.spring.service;
  2. public interface ILoginService {
  3. public boolean login(String userName, String password);
  4. }

2.LoginServiceImpl.java

  1. package cn.com.spring.service.impl;
  2. import cn.com.spring.service.ILoginService;
  3. public class LoginServiceImpl implements ILoginService {
  4. public boolean login(String userName, String password) {
  5. System.out.println("login:" + userName + "," + password);
  6. return true;
  7. }
  8. }

3.ILogService.java

  1. package cn.com.spring.service;
  2. import org.aspectj.lang.JoinPoint;
  3. public interface ILogService {
  4. //无参的日志方法
  5. public void log();
  6. //有参的日志方法
  7. public void logArg(JoinPoint point);
  8. //有参有返回值的方法
  9. public void logArgAndReturn(JoinPoint point,Object returnObj);
  10. }

4.LogServiceImpl.java

  1. package cn.com.spring.service.impl;
  2. import org.aspectj.lang.JoinPoint;
  3. import cn.com.spring.service.ILogService;
  4. public class LogServiceImpl implements ILogService {
  5. @Override
  6. public void log() {
  7. System.out.println("*************Log*******************");
  8. }
  9. //有参无返回值的方法
  10. public void logArg(JoinPoint point) {
  11. //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
  12. Object[] args = point.getArgs();
  13. System.out.println("目标参数列表:");
  14. if (args != null) {
  15. for (Object obj : args) {
  16. System.out.println(obj + ",");
  17. }
  18. System.out.println();
  19. }
  20. }
  21. //有参并有返回值的方法
  22. public void logArgAndReturn(JoinPoint point, Object returnObj) {
  23. //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
  24. Object[] args = point.getArgs();
  25. System.out.println("目标参数列表:");
  26. if (args != null) {
  27. for (Object obj : args) {
  28. System.out.println(obj + ",");
  29. }
  30. System.out.println();
  31. System.out.println("执行结果是:" + returnObj);
  32. }
  33. }
  34. }

5.applicationContext.java

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. http://www.springframework.org/schema/aop
  8. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  9. <bean id="logService" class="cn.com.spring.service.impl.LogServiceImpl"></bean>
  10. <bean id="loginService" class="cn.com.spring.service.impl.LoginServiceImpl"></bean>
  11. <aop:config>
  12. <!-- 切入点 -->
  13. <aop:pointcut
  14. expression="execution(* cn.com.spring.service.impl.LoginServiceImpl.*(..))"
  15. id="myPointcut" />
  16. <!-- 切面: 将哪个对象中的哪个方法,织入到哪个切入点 -->
  17. <aop:aspect id="dd" ref="logService">
  18. <!-- 前置通知
  19. <aop:before method="log" pointcut-ref="myPointcut" />
  20. <aop:after method="logArg" pointcut-ref="myPointcut">
  21. -->
  22. <aop:after-returning method="logArgAndReturn" returning="returnObj" pointcut-ref="myPointcut"/>
  23. </aop:aspect>
  24. </aop:config>
  25. </beans>

6.TestMain.java

  1. public class TestMain {
  2. public static void testSpringAOP(){
  3. ApplicationContext ctx = new ClassPathXmlApplicationContext("app*.xml");
  4. ILoginService loginService = (ILoginService)ctx.getBean("loginService");
  5. loginService.login("zhangsan", "12344");
  6. }
  7. public static void main(String[] args) {
  8. testSpringAOP();
  9. }
  10. }
7.输出结果:
  1. login:zhangsan,12344
  2. 目标参数列表:
  3. zhangsan,
  4. 12344,
  5. 执行结果是:true

解析:1.先调用了login()方法System.out.println("login:" + userName + "," + password);

2.再调用了logArgAndReturn()方法输出了日志,并且返回了login()方法是否成功

  1. System.out.println("目标参数列表:");
  2. if (args != null) {
  3. for (Object obj : args) {
  4. System.out.println(obj + ",");
  5. }
  6. System.out.println();
  7. System.out.println("执行结果是:" + returnObj);
  8. }

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(17841) | 评论(1) | 转发(0) |

0

上一篇:Spring MVC 原理小结+简单应用

下一篇:hibernate 查询HQL小结 +DAO层参数绑定(即?写法) + 分页查询

相关热门文章
  • 欢迎xiaop_0822在ChinaUnix博...
  • 欢迎zzzhaopengggdsf在ChinaUn...
  • 欢迎laopi0711在ChinaUnix博客...
  • 欢迎BuKaoPu0213在ChinaUnix博...
  • 欢迎yupaopao887在ChinaUnix博...
  • 关于SSI
  • IP Sec VPN与NAT破镜重圆
  • JS模拟鼠标自动点击
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~

shuaixianbo2015-05-14 19:01:19

谢谢楼主,找了一下午,就你帮了我的忙。

回复 | 举报

评论热议

Spring AOP 日志管理相关推荐

  1. Spring Aop 日志管理及配置文件的详细配置

    Spring 带给我们的另一个好处就是让我们可以"专心做事",下面我们来看下面一个例子: public void doSameSomesing(int age,String nam ...

  2. Spring Boot 日志管理

    在代码有问题的时候,很多人应该都是通过 debug 的方式去排查,往往忽略了日志的重要性. 好的日志管理可以快速定位问题出现的位置,也可以提高代码的阅读性.这篇博文主要介绍一下 Spring Boot ...

  3. Spring AOP事务管理(使用切面把事务管理起来)

    在<Spring Transaction 分析事务属性(事务的基本概念.配置)>基础上 1.使用基于注解的AOP事务管理  <tx:annotation-driven transac ...

  4. Spring学习总结(17)——Spring AOP权限管理

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  5. spring aop日志(两种方式)

    第一种方式(全注解): <!-- 定义事务管理器(声明式的事务) -->       <bean id="transactionManager"         ...

  6. spring --aop(日志记录)在工程中实际使用

    2019独角兽企业重金招聘Python工程师标准>>> ###1.日志切面 package com.readygo.zbhealth.common;import java.util. ...

  7. Java框架篇---spring aop两种配置方式

    Java框架篇---spring aop两种配置方式 第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步:  1. 使用注解@Aspect来定义一个切面,在切面中 ...

  8. Spring AOP 从入门到放弃

    Spring AOP 主要内容 代理模式 代理模式在 Java 开发中是一种比较常见的设计模式.设计目的旨在为服务类与客户类之间插入其他功能,插入的功能对于调用者是透明的,起到伪装控制的作用.如租房的 ...

  9. 面试官:连Spring AOP都说不明白,自己走还是我送你?

    前言 因为假期原因,有一段时间没给大家更新了!和大家说个事吧,放假的时候一位粉丝和我说了下自己的被虐经历,在假期前他去某互联网公司面试,结果直接被人家面试官Spring AOP三连问给问的一脸懵逼!其 ...

最新文章

  1. java.sql在哪_我的Java访问MS SQL的程序错在哪了?谢谢!
  2. q160问题,www.q160.com,ie被篡改
  3. Egit Patch
  4. openstack domain serverID connect uri
  5. IntelliJ IDEA 如何创建一个普通的java项目,及创建java文件并运行
  6. 例说C#深拷贝与浅拷贝
  7. 最大化窗口设置_打开表格总是默认窗口最小化?适用Word、PPT等其他应用
  8. Java 中的并发工具类
  9. java 参数代替所有类_Java中的常用类
  10. Namomo Spring Camp Div2 Week1 - 第四次打卡
  11. Python基础班---第一部分(基础)---Python基础知识---计算机组成原理
  12. 宣称“禁用新疆产品”,英特尔紧急道歉:出于表述合规合法初衷
  13. 【NetApp】可以使用查设备备件型号的链接
  14. ArrayList、Vector、LinkedList的特点和区别
  15. swagger/knife4j小事记录(二)
  16. MySQL导入northwind数据库完全手册
  17. 14届数独-真题标准数独-Day 4-20220119
  18. matlab命令行窗口显示长度设置_MATLAB的命令窗口、图形窗口
  19. 怎么用计算机进行气象预报,中央气象台进行天气预报,先用计算机解出描述天气演变的方程组,“算”出来未来天 - 问答库...
  20. 负载均衡器之F5和Nginx

热门文章

  1. 马士兵网络安全大师班薪选课程
  2. 10000php换人民币,转 数字转大写人民币
  3. neo4j图数据库Cypher语句
  4. 如何使用DMA,包含源码以及详细注释
  5. 【数据分析可视化】分组和透视功能实战-航班数据分析
  6. 基于51单片机自动数字电压表PCF8591 TLC2543 TL548 proteus仿真汇编程序设计
  7. Java简史-SUN
  8. [PPTX解析] 图片效果算法篇:设置透明色
  9. Oracle 学习之建表、索引、同义词以及SQL优化
  10. 手游自动化测试基础:方法及流程