java

位置:IT落伍者 >> java >> 浏览文章

通过注解简化spring aop织入点的指定


发布日期:2024年01月02日
 
通过注解简化spring aop织入点的指定
大型Java web应用往往有很大的系统访问量为了保护服务器免于出现过载的情况一般都需要对流量进行控制对于web页面的访问一般通过配置服务器或者apache可以起到保护的作用但是对于webservice在负载均衡之外还需要一些手段来防止系统过载这些手段需要通过服务器端编码实现

一般地实现这类监控一般选择是用aop的方式在不影响功能代码的情况下进行这里spring aop是一个通常的选择无论通过xml配置的方式还是使用AspectJspring aop都必须由开发者通过代码形式确定织入点对于小型webservice应用来

如果将一系列webservice接口放在同一的包中那么配置还相对简单但对于一个相对较大的webservice应用他的配置将变得非常繁琐并且对于个性化的需求并不好处理

AspectJ定义织入点是可以通过使用比如execution within target等函数声明切入点这些函数就不一一解释了这里要说明的是使用execution与annotation配合实现自定义织入点的方法方便灵活地配置需要监控的方法

先把代码贴上来

注解定义如下

@Target({ElementTypeMETHOD})

@Retention(RetentionPolicyRUNTIME)

public @interface Monitor {

String value() default ;

}

这样就可以在目标方法上使用注解了

切面

@Aspect

public class MonitorInterceptor {

@Around(execution(* ***()) && @annotation(monitor)

public void doMonitor (ProceedingJoinPoint joinPoint Monitor monitor) {

//业务代码

}

}

execution(* ***())表示执行任何方法

@annotation(monitor)表示方法上带有Monitor注解的

当满足这两个条件时即时满足条件的切入点

使用这种方式在doMonitor方法中必须要有一个Monitor类型的入参否则会抛出异常(试试就知道了)

如果不想使用这种方式可以考虑使用

@Around(execution(@Monitor * ***())

接下来只要将目标webservice做为一个bean加载到spring容器中并且配置使用aspectJ即可如下

<?xml version=

encoding=UTF?><beans xmlns=/schema/beans

xmlns:xsi=//XMLSchemainstance

xmlns:context=/schema/context

xmlns:aop=/schema/aop

xsi:schemaLocation=/schema/context /schema/context/springcontextxsd

/schema/beans /schema/beans/springbeansxsd

/schema/aop /schema/aop/springaopxsd>

<aop:aspectjautoproxy /></beans>

测试类

public class Test {

@Monitor

public void test {

//业务代码

}

}

只要将Test类配置入spring就能发现aop生效了

上一篇:使用Java Swing界面实现数据库基本操作

下一篇:Java Socket通信技术收发线程互斥的解决方法