AI智能
改变未来

spring中的aspectj的一些总结

业务层代码:

public class UserServiceImpl implements UserService {@Overridepublic String addUser(String name) {//		int i = 10/0;System.out.println(\"添加用户\");return \"hello\";}}

日志类功能的代码:

/**** @author jilike* @time 2020年4月1日 下午4:55:01* 如果在接口中有返回值,则需要在后置通知中进行返回此值,且环绕通知也需要进行返回值,因为环绕对象成功环绕执行后,才能够执行后置通知。*/public class Logrecord {//前置通知public void before(String name) {System.out.println(\"开始\"+name);}//后置通知public void after(String returnValue) {System.out.println(\"之后\"+returnValue);}//环绕通知public Object around(ProceedingJoinPoint point) {System.out.println(\"环绕前\");//如果在接口中有返回值,则需要在后置通知中进行返回此值,且环绕通知也需要进行返回值,因为环绕对象成功环绕执行后,才能够执行后置通知。Object object = null;try {object = point.proceed();} catch (Throwable e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(\"环绕后\");return object;}//异常通知public void throwing(Throwable e) {System.out.println(e.getMessage());}//最终通知public void finalAdvice() {System.out.println(\"最终通知\");}}

xml文件中的配置:
注意:应该在aop前打上对勾

1.确定代理目标对象 利用<aop:config中的<aop:pointcut expression=\”\” 标签进行确定。
2.之后确定织入方法切面,比如此类测试中logRecord为需要织入的切面,所以需要传入logRecord的bean实例化的id。
3.之后便是根据方法的不同进行不同方法的传入。

<bean class=\"com.zut.aspectj.UserServiceImpl\" id=\"userService\"></bean><bean class=\"com.zut.aspectj.Logrecord\" id=\"logRecord\"></bean><aop:config><!-- 确定目标对象 --><!--  --><aop:pointcut expression=\"execution(* com.zut.aspectj.UserService.*(..))\" id=\"pointcut\"/><!-- 如果方法中含有参数,就需要进行如下写法 --><aop:pointcut expression=\"execution(* com.zut.aspectj.UserService.*(String)) and args(name)\" id=\"pointcut2\"/><!-- 确定织入方法切面 --><aop:aspect ref=\"logRecord\"><!-- 在确定对应方法后 要与确定的目标对象所关联 pointcut-ref--><!-- 返回方法中的参数,利用before进行返回 --><aop:before method=\"before\" pointcut-ref=\"pointcut2\" arg-names=\"name\"/><aop:after-returning method=\"after\" pointcut-ref=\"pointcut\" returning=\"returnValue\"/><aop:around method=\"around\" pointcut-ref=\"pointcut\"/><aop:after-throwing method=\"throwing\" pointcut-ref=\"pointcut\" throwing=\"e\"/><aop:after method=\"finalAdvice\" pointcut-ref=\"point-cut\"/></aop:aspect></aop:config>

测试类

public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext(\"/com/zut/aspectj/Asceptj.xml\");UserService service = context.getBean(\"userService\",UserService.class);service.addUser(\"tom\");}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » spring中的aspectj的一些总结