大型国企网站建设费用,上海好的高端网站建设服务公司,做网站公司上海,家装设计网页版文章目录 1.前言2.xml配置AOP3. 总结 1.前言
在之前的学习中,都是使用注解的方式进行AOP的配置.其实使用xml配置文件也可以配置AOP.
2.xml配置AOP
xml配置AOP方法如下: 添加相关依赖 dependenciesdependencygroupIdorg.springframework/groupId… 文章目录 1.前言2.xml配置AOP3. 总结 1.前言
在之前的学习中,都是使用注解的方式进行AOP的配置.其实使用xml配置文件也可以配置AOP.
2.xml配置AOP
xml配置AOP方法如下: 添加相关依赖 dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.29/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.7/version/dependency
/dependencies 相关bean放到Spring容器中 Service
public class StudentService {public void insert(){System.out.println(StudentService中的insert方法);}
}创建切面类注入到Spring中,我这里使用的是Component注解,也可以在配置文件中使用Bean标签 Component
public class Aspect {Pointcut(execution(* com.example.service..*.*(..))public void pt(){System.out.println();}public void methodBefore(JoinPoint joinPoint){Object[] args joinPoint.getArgs();Object target joinPoint.getTarget();MethodSignature signature (MethodSignature) joinPoint.getSignature();System.out.println(Before);}
}在配置文件中开启组件扫描(因为我在将相应的Bean注入到Spring中时,使用的是注解,如果使用Bean标签,这一步可以省略) context:component-scan base-packagecom.example
/context:component-scan在配置文件中配置AOP,将切面类(StudentService)中的methodBefore方法设置为前置通知 aop:config!--定义切面--aop:pointcut idpt expressionexecution(* com.example.service..*.*(..))/!--配置切面--aop:aspect refaspect!--配置通知类型--!-- aop:before methodmethodBefore pointcut-refpt/ --aop:before methodmethodBefore pointcutcom.example.aspect.Aspect.pt()//aop:aspect/aop:config配置通知类型中有两种写法,一种是用pointcut-ref属性,值是定义切面时的id,另一种是使用pointcut属性,需要指定切点方法的全类名
运行结果: 可以看到成功将StudentService中的methodBefore方法设置为前置通知了
接下来讲一下复杂的通知如何配置,如下:
AfterReturning(value point(),returning ret)
public void methodAfterReturning(JoinPoint joinPoint, Object ret){// 方法体
}
AfterThrowing(value point(),throwing e)
public void methodAfterThrowing(JoinPoint joinPoint,Throwable e){// 方法体
}AfterReturning和AfterThrowing是有两个参数的
以AfterReturning为例,在切面类中添加对应的普通方法:
Component
public class Aspect {Pointcut(execution(* com.example.service..*.*(..)))public void pt(){System.out.println();}public void methodBefore(JoinPoint joinPoint){Object[] args joinPoint.getArgs();Object target joinPoint.getTarget();MethodSignature signature (MethodSignature) joinPoint.getSignature();System.out.println(Before);} public void methodAfterReturning(JoinPoint joinPoint, Object ret){System.out.println(AfterReturning: ret);}
}aop:aspect refaspect!--配置通知类型--!-- aop:before methodmethodBefore pointcut-refpt/ --aop:before methodmethodBefore pointcutcom.example.aspect.Aspect.pt()/aop:after-returning methodmethodAfterReturning pointcut-refpt returningret/
/aop:aspect需要注意在设置AOP时,标签中有returning这样一个属性
运行结果: 3. 总结
xml配置AOP的重要步骤:
定义切面类,定义切点.将目标类和切面类添加到Spring容器中(注解或Bean标签),如果是注解方式,需要添加组件扫描在配置文件中配置AOP
在实际开发中,用注解配置AOP比较多,xml配置AOP了解即可