1. 用户管理业务逻辑接口(UserManagerApplogic.java )
package com.iteye.applogic;
public interface UserManagerApplogic {
public void addUser(String name);
}
2. 用户管理业务逻辑实现类(UserManagerApplogicImpl.java)
package com.iteye.applogic.impl;
import org.springframework.stereotype.Component;
import com.iteye.applogic.UserManagerApplogic;
import com.iteye.annotation.BussAnnotation;
@Component("userManager")
public class UserManagerApplogicImpl implements UserManagerApplogic {
@BussAnnotation(moduleName="人员管理",option="添加用户")
public void addUser(String name) {
System.out.println("add a User!Name is "+name);
}
}
3.业务注释类(BusAnnotation.java)
package com.iteye.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface BussAnnotation {
//模块名
String moduleName();
//操作内容
String option();
}
(1)RetentionPolicy(保留策略)是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME。
SOURCE 代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。
ClASS的 代表的是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS。
RUNTIME代表的是表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的。
(2)ElementType
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.
TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上.
FIELD(属性)
METHOD(方法)
PARAMETER(参数)
CONSTRUCTOR(构造函数)
LOCAL_VARIABLE(局部变量)
ANNOTATION_TYPE
PACKAGE(包)
(3)@Documented
@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息。
(4)@Inherited
如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型。
4.切面类(LogInterceptor.java)
package com.iteye.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import com.iteye.annotation.BussAnnotation;
@Aspect
@Component
public class LogInterceptor {
@Pointcut("execution(public * com.iteye..*.addUser(..))")
public void aApplogic() {}
@Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")
public Object interceptorApplogic(ProceedingJoinPoint pj,
BussAnnotation annotation, Object object) throws Throwable {
System.out.println("moduleName:"+annotation.moduleName());
System.out.println("option:"+annotation.option());
pj.proceed();
return object;
}
}
5.配置文件(applicationContext-aop.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.iteye"/>
<aop:aspectj-autoproxy />
</beans>
6.测试类( test.java (Junit) )
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.iteye.applogic.UserManagerApplogic;
public class test {
@Test
public void test1()
{
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext-aop.xml");
UserManagerApplogic userManager = (UserManagerApplogic) ctx.getBean("userManager");
userManager.addUser("-li.bb-");
ctx.destroy();
}
}
分享到:
相关推荐
在Java开发中,Spring AOP(面向切面编程)是一个强大的功能,用于实现日志记录。AOP允许我们在不修改原有代码的情况下,插入新的行为,比如日志记录,事务管理等。下面将详细介绍如何在Spring框架中使用AOP来实现...
spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...
标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...
在这里,我们重点关注如何利用Spring AOP实现分层日志记录。 **一、Spring AOP基本概念** 1. **切面(Aspect)**: 切面是封装了横切关注点的模块,例如日志记录就是一个横切关注点,它横跨多个对象和类。 2. **通知...
总之,Spring AOP通过代理技术实现了面向切面编程,使得开发者能够更专注于业务逻辑,而将通用的横切关注点剥离出来,提高了代码的可读性和可维护性。通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)...
为了在不改变原代码的情况下增加日志记录功能,我们创建了一个名为HelloProxy的代理类,该代理类也实现了IHello接口。代理类中的sayHello()方法会在调用原Hello类的sayHello()方法之前和之后分别调用Logger类进行...
本篇将深入探讨如何利用Spring AOP来实现鉴权和日志记录。 **二、AOP基础知识** 1. **切面(Aspect)**:AOP的核心概念,它封装了关注点,如日志记录或权限验证。一个切面通常包含一个或多个通知(advice)。 2. ...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们在代码中实现横切关注点,如日志记录、权限控制等,而无需侵入业务逻辑。本篇将深入探讨如何使用Spring AOP来记录操作日志,并通过自定义Aspect...
总结来说,Spring AOP提供了一种简洁且灵活的方式来实现日志功能,使得开发者可以专注于业务逻辑,而不是重复的日志记录代码。通过定义切面和通知,我们可以将日志操作与业务代码解耦,提升代码的可复用性和可扩展性...
AOP允许我们在不修改原有业务逻辑的情况下,插入日志记录代码,使得日志功能的实现更加灵活和高效。 首先,让我们理解Flex和Spring这两个技术。Flex是一种基于Adobe Flash Player或Adobe AIR的开放源代码框架,用于...
通过以上方式,我们可以利用Spring AOP和元注解实现灵活的日志管理和分析,同时确保日志记录对系统性能的影响最小。这在大型Java应用中尤其重要,因为它提供了宝贵的运维数据,有助于问题排查和性能优化。
其中,AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者将关注点从核心业务逻辑中分离出来,如日志记录、事务管理等,这些被称为“切面”的功能可以被模块化并独立处理。...
本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志记录框架,能够自动追踪和记录应用程序的关键操作,同时支持数据持久化到数据库中,方便后期分析和问题排查。下面将详细介绍这些技术...
另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
内容概要: 充分利用SpringBoot AOP设计的精妙日志记录方案,实现高效的日志处理策略。此外,我们还支持通过配置文件(yml)精准控制日志开关,并定制AOP切点表达式(Pointcut)。 适用人群: 针对资深Java开发者、...