关于Aop的原理,动态代理,反射,之类的底层java技术网上搜一堆一堆的。。我就不多说了,主要说在spring上使用aop的方法。
首先不得不说一下的就是,spring aop的支持需要外部依赖包:
aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.2.2.jar
commons-logging-1.1.1.jar
还有经典的日志jar
log4j-1.2.16.jar.
这些都是spring aop 需要的外部包
好了,入正题了:
首先在spring配置文件中添加
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
来启用@AspectJ支持
然后随便新建一个类,就用来查询学生信息吧:
public class StudentDAO implements DAO{ public void query(){ //db操作,这里就打印意思下.. System.out.println("query student"); } }
这个类就是一个平常的查询学生信息的类,加入我们想要执行一些权限限制,譬如管理员才可以查看学生的信息,或者日志记录等操作,加入按照平常的做法,
可能会在业务方法(上面的query()方法)中添加一些其他逻辑代码,会使代码非常混乱,因为权限限制,日志记录等操作不属于业务范畴之内。
因此可以新建一个处理这些操作的类:
@Aspect public class AopCatch{ @Before("execution(* test.aop.StudentDAO.query(..))") public void beforeMethod(){ //这里可以进行一些在query方法执行之前的操作 } @After("execution(* test.aop.StudentDAO.query(..))") public void afterMethod(){ //这里可以进行一些在query方法执行之后的操作 } }
这样就可以在业务方法执行的时候进行一些非业务范畴之外的逻辑处理,并且不影响业务代码。
以上纯属个人鄙见,有什么错误请轻拍- -#。
时间: 2024-10-06 00:53:22