转至:http://blog.chinaunix.net/uid-26959955-id-3275282.html
1.对AOP的理解 —— 分工来做各个部分,运行时候整合的思想
2.理解 面向过程,面向对象,面向切面 的思想
1)面向过程:房间装修时,准备装一个灯,就拉一根电线,连接灯。
2)面向对象:设计房间中哪些位置需要使用电线接口,然后在相应的位置设置电线接口,以备以后使用。
3)面向切面:装修房子,先设计需要在哪些地方装上电线接口,就将电线接口先设置好并且不打开接口,此处即为连接点,当此处电线切口确实需要使用时将接口打开插电器即为切入点。
方面:功能(登陆 日志)
目标:主要方面(登陆)
切面:切入点 植入 通知的综合体
连接点:可以插入副功能(日志)的地方
切入点:准备插入副功能的地方
通知:对副功能的封装对象
植入:将通知插入切入点
3.实现登陆和日志管理(使用Spring AOP)
1)LoginService LogService TestMain
2)用Spring 管理 LoginService 和 LogService 的对象
3)确定哪些连接点是切入点,在配置文件中
4)将LogService封装为通知
5)将通知植入到切入点
6)客户端调用目标
-
<aop:config>
- <aop:pointcut expression="execution(* cn.com.spring.service.impl.*.*(..))" id="myPointcut"/>
- <!--将哪个-->
- <aop:aspect id="dd" ref="logService">
- <aop:before method="log" pointcut-ref="myPointcut"/>
- </aop:aspect>
-
</aop:config>
execution(* * cn.com.spring.service.impl.*.*(..))
1)* 所有的修饰符
2)* 所有的返回类型
3)* 所有的类名
4)* 所有的方法名
5)* ..所有的参数名
1.ILoginService.java
-
package cn.com.spring.service;
-
public interface ILoginService {
- public boolean login(String userName, String password);
- }
2.LoginServiceImpl.java
-
package cn.com.spring.service.impl;
-
import cn.com.spring.service.ILoginService;
-
public class LoginServiceImpl implements ILoginService {
- public boolean login(String userName, String password) {
- System.out.println("login:" + userName + "," + password);
- return true;
- }
- }
3.ILogService.java
-
package cn.com.spring.service;
-
import org.aspectj.lang.JoinPoint;
-
public interface ILogService {
- //无参的日志方法
- public void log();
- //有参的日志方法
- public void logArg(JoinPoint point);
- //有参有返回值的方法
- public void logArgAndReturn(JoinPoint point,Object returnObj);
- }
4.LogServiceImpl.java
-
package cn.com.spring.service.impl;
-
import org.aspectj.lang.JoinPoint;
-
import cn.com.spring.service.ILogService;
-
public class LogServiceImpl implements ILogService {
- @Override
- public void log() {
- System.out.println("*************Log*******************");
- }
-
- //有参无返回值的方法
- public void logArg(JoinPoint point) {
- //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
- Object[] args = point.getArgs();
- System.out.println("目标参数列表:");
- if (args != null) {
- for (Object obj : args) {
- System.out.println(obj + ",");
- }
- System.out.println();
- }
- }
- //有参并有返回值的方法
- public void logArgAndReturn(JoinPoint point, Object returnObj) {
- //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
- Object[] args = point.getArgs();
- System.out.println("目标参数列表:");
- if (args != null) {
- for (Object obj : args) {
- System.out.println(obj + ",");
- }
- System.out.println();
- System.out.println("执行结果是:" + returnObj);
- }
- }
- }
5.applicationContext.java
-
<?xml version="1.0" encoding="UTF-8"?>
-
<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
- <bean id="logService" class="cn.com.spring.service.impl.LogServiceImpl"></bean>
- <bean id="loginService" class="cn.com.spring.service.impl.LoginServiceImpl"></bean>
- <aop:config>
- <!-- 切入点 -->
- <aop:pointcut
- expression="execution(* cn.com.spring.service.impl.LoginServiceImpl.*(..))"
- id="myPointcut" />
- <!-- 切面: 将哪个对象中的哪个方法,织入到哪个切入点 -->
- <aop:aspect id="dd" ref="logService">
- <!-- 前置通知
- <aop:before method="log" pointcut-ref="myPointcut" />
- <aop:after method="logArg" pointcut-ref="myPointcut">
-
-->
- <aop:after-returning method="logArgAndReturn" returning="returnObj" pointcut-ref="myPointcut"/>
- </aop:aspect>
- </aop:config>
-
</beans>
6.TestMain.java
- public class TestMain {
-
public static void testSpringAOP(){
- ApplicationContext ctx = new ClassPathXmlApplicationContext("app*.xml");
-
- ILoginService loginService = (ILoginService)ctx.getBean("loginService");
- loginService.login("zhangsan", "12344");
- }
- public static void main(String[] args) {
- testSpringAOP();
- }
- }
7.输出结果:
-
login:zhangsan,12344
- 目标参数列表:
- zhangsan,
- 12344,
- 执行结果是:true
解析:1.先调用了login()方法System.out.println("login:" + userName + "," + password);
2.再调用了logArgAndReturn()方法输出了日志,并且返回了login()方法是否成功
-
System.out.println("目标参数列表:");
- if (args != null) {
- for (Object obj : args) {
- System.out.println(obj + ",");
- }
- System.out.println();
- System.out.println("执行结果是:" + returnObj);
- }
分享到:
相关推荐
Spring AOP 日志管理 实例LoggingThrowsAdvice.java
总结来说,Spring AOP日志框架允许我们通过注解方式轻松地实现业务日志管理,提高代码的可读性和可维护性,同时减少了代码冗余。通过自定义切面和通知,我们可以灵活地控制日志记录的时机和内容,满足不同场景的需求...
结合logback和切面对参数名和参数值,方法运行时间,方法返回值记录日志,pom中需要添加ogback和切面依赖。
另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...
本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。
采用SpringAOP拦截Controller,Service实现操作日志管理,统一处理异常,登陆日志管理,是SpringAOP的应用实践。通过SpringAOP的处理,可以方便移植日志管理功能,是个不错的学习demo
在Spring MVC框架中,AOP(面向切面编程)是一种强大的工具,用于实现日志拦截,特别是对于controller层的操作。AOP允许我们定义横切关注点,这些关注点可以是如日志记录、事务管理、权限检查等通用功能,它们在程序...
Spring AOP,全称为Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,主要用来处理系统的横切关注点,如日志记录、事务管理、性能监控等。这些关注点通常会分散在应用程序的各个角落,而AOP就是为了...
各种切面编写方式,简单方便的完成切点打印日志,和执行其他方法少时诵诗书所
4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序进行横向关注点的插入,比如日志记录、事务管理、权限检查等。在这里,我们重点关注如何利用Spring AOP实现分层...
<bean id="testBeforeAdvice" class="com.company.springaop.test.TestBeforeAdvice" /> <bean id="beanImpl" class="com.company.springaop.test.BeanImpl" /> ``` 在这个配置中,`aop:before`元素定义了一个切点...
Spring AOP(Aspect Oriented Programming,面向切面...总的来说,Spring AOP通过提供面向切面的编程能力,极大地提高了代码的可复用性和可维护性,降低了系统复杂度,特别是在处理共性问题如日志、事务、安全等方面。
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在代码的关键点插入额外的行为,比如日志记录。本项目是关于如何利用Spring AOP来实现日志功能的一个实例。以下是对相关知识点的详细说明: 1. **...
在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能...在提供的"aopLog-demo"项目中,你可以找到更多关于Spring AOP日志管理的实际应用示例,这将有助于你进一步理解和实践这一技术。
总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...
本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪。通过使用Java 1.8,我们可以利用其新特性,如Lambda表达式,来简化代码。 首先,让我们理解Spring AOP的基本概念。AOP是面向...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...