文档章节

SpringAop日志管理

烤猪佩奇
 烤猪佩奇
发布于 2016/02/29 17:21
字数 889
阅读 7
收藏 0

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.     //有参无返回值的方法
  11.     public void logArg(JoinPoint point) {
  12.         //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
  13.         Object[] args = point.getArgs();
  14.         System.out.println("目标参数列表:");
  15.         if (args != null) {
  16.             for (Object obj : args) {
  17.                 System.out.println(obj + ",");
  18.             }
  19.             System.out.println();
  20.         }
  21.     }

  22.     //有参并有返回值的方法
  23.     public void logArgAndReturn(JoinPoint point, Object returnObj) {
  24.         //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
  25.         Object[] args = point.getArgs();
  26.         System.out.println("目标参数列表:");
  27.         if (args != null) {
  28.             for (Object obj : args) {
  29.                 System.out.println(obj + ",");
  30.             }
  31.             System.out.println();
  32.             System.out.println("执行结果是:" + returnObj);
  33.         }
  34.     }
  35. }
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.         
  5.         ILoginService loginService = (ILoginService)ctx.getBean("loginService");
  6.         loginService.login("zhangsan", "12344");
  7. }
  8. public static void main(String[] args) {
  9. testSpringAOP();
  10. }
  11. }
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.         }

本文转载自:http://blog.csdn.net/cjaver/article/details/39525719

共有 人打赏支持
烤猪佩奇
粉丝 18
博文 46
码字总数 6583
作品 0
广州
高级程序员
青橘子的服务端 - 拦截器+注解实现登陆验证

思路 拦截器拦截所有配置好的路径,取出注解对象判断是否需要进行登陆判断。 其实也可以用AOP来实现。 代码 测试Controller 注解类 配置类 拦截器 参考资料 SpringBoot使用自定义注解实现权限...

花有信
2017/11/27
0
0
主题:基于springMVC+springSecurity3.x+Mybaits3.x的权限系统,,

在平时的空闲时,自己做了一个权限管理系统,细粒度控制,支持控制到按扭!支持开源!分享知识!  很久之前就想把自己所学到的知识以及项目所用的技术集结起来,之前太忙了,一直没有动手做...

moz1q1
2014/07/22
0
1
基于springMVC+springSecurity3.x+Mybaits3.x的权限系统,,开放源码,支持开源

转载于我的csdn播客 http://blog.csdn.net/mmm333zzz/article/details/16863543 在平时的空闲时,自己做了一个权限管理系统,细粒度控制,支持控制到按扭!支持开源!分享知识! 很久之前...

蓝缘Y
2013/11/24
0
6
使用Spring AOP进行性能监控

如果你正在使用Spring(Spring文档)管理/访问资源(Dao/Service),那么你可能也需要添加一些基础的性能监控。在Spring AOP的帮助下这将变成一个简单的任务,不需要任何现有代码的变化,只是...

王振威
2012/07/08
0
16
SpringCloud拦截器使用(Interceptors拦截器使用)

SpringCloud后端要对前端请求进行拦截,也就是日志记录,使用SpringAOP方式即面向切面方式进行拦截。 首先,拦截请求地址(ip),使用HandlerInterceptorAdapter,它拦截的是请求地址,所以针...

Bug-Killer
05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
今天
2
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
38
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部