标签:
我所理解的aop就是,当调用一个方法时,调用前需要调用另一个类的公共方法,调用后又需要调用另一个方法,调用前和调用后的这两个方法在
其他有些方法调用时也需要调用,所以这两个方法就可以作为切面,切入那些需要调用它们的方法前和后,那些被切面切入的方法完全不知道这个
切面,就像系统中的事务管理,日志管理,安全管理等,在大部分方法被调用时都需要调用的公共方法。例如:
这是一个没有aop的类。这个A 类还需要管理注入的B对象,B本不该由A来负责管理的,毕竟
如果还有D类也需要B类的方法,那样岂不是D类也需要管理注入的B对象,
public class A{
private B b;
private C c;
public A(C c,B b) { //注入C对象,B对象
this.c = c;
this.b = b;
}
public void a() {
b.b(); //c方法执行前执行
c.c();
b.b2(); //c方法执行后执行
}
}
public class C{
public void c() {
system.out.println("我是c方法");
}
}
public class B{
public void b() {
system.out.println("我是c方法执行前执行的b方法");
}
public void b2() {
system.out.println("我是c方法执行后执行的b2方法");
}
}
这是一个修改为切面的类,这样A类完全不知道自己被切面B切入了,也不需要管理B对象,只需要执行自己的业务逻辑就好
public class A{
private C c;
public A(C c) { //注入C对象
this.c = c;
}
public void a() {
c.c();
}
}
public class B{
public void b() {
system.out.println("我是a方法执行前执行的b方法");
}
public void b2() {
system.out.println("我是a方法执行后执行的b2方法");
}
}
在A.xml里配置一下
<bean id="b" class="这里是B类的完整路径"/> //首先需要将B类声明为一个Bean
<aop:config>
<aop:aspect ref="b">
<aop:pointcut id="c"
expression="execution(* *.a(..))" /> //c:被切入的那个方法。定义切面
<aop:before pointcut-ref="c"
method="b" /> //c方法执行前执行的b方法
<aop:after pointcut-ref="c"
method="b2" /> //c方法执行后执行的b2方法
</aop aspect>
</aop:config>
标签:
原文地址:http://www.cnblogs.com/SHANKS-log/p/5160799.html