aop相关的概念及配置

[b]切面(Aspect)[/b]:
通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。

[b]连接点(joinpoint)[/b]
spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。

[b]通知(Advice)[/b]
通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环绕通知。

[b]切入点(Pointcut)[/b]
所谓切入点,通常是指一个表达式,按照包的匹配来切入进去。

[b]目标对象(target)[/b]
代理的目标对象。

以下是spring aop的一个实现
先写切面类,代码如下:

public class AopDemo {

public void beforeAdvice(){
System.out.println("我是前置通知");
}

/*
* 如果目标方法发生异常,则后置通知不会执行
*/
public void afterReturnAdvice(){
System.out.println("我是后置通知");
}

/*
* 如果目标方法发生异常,则最终方法还是会执行
*/
public void afterAdvice(JoinPoint joinPoint){

System.out.println(joinPoint.getTarget());//可以获取到目标对象
System.out.println(joinPoint.getArgs()[0]);//获取目标方法的参数

System.out.println("我是最终通知");
}

/*
* 如果发生异常才执行此方法,否则不执行
*/
public void exceptionAdvice(){
//实际的时候如果发生异常,可以跳转错误页面,也可以发邮件给管理员告知出了异常
System.out.println("我是异常通知");
}

public void aroundAdvice(){
//
System.out.println("我是环绕通知");
}

}

然后写业务逻辑类:
public class GoodsImpl {

public void save(Goods goods){
System.out.println("save goods");
}

public void delete(Goods goods){
System.out.println("delete goods");
}

}


配置文件代码:
<!--业务逻辑类  -->
<bean id="goodsImpl" class="com.alt.bean.GoodsImpl"/>
<!-- 切面 -->
<bean id="aop" class="com.alt.aop.AopDemo"/>

<aop:config>
<aop:aspect ref="aop">
<aop:after method="afterAdvice" pointcut="execution(* com.alt.bean.GoodsImpl.save(..))"/>
</aop:aspect>
</aop:config>


最后的测试类:
public class AopTest {
private static ClassPathXmlApplicationContext context = null;
private static GoodsImpl goodsImpl = null;
@BeforeClass
public static void init(){
context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
goodsImpl = (GoodsImpl) context.getBean("goodsImpl");
}
@Test
public void testAop(){
System.out.println("start");
Goods goods = new Goods(1, "大米", 23.4);
goodsImpl.save(goods);
}

}

以上是一个AOP的一个大致实现。
最后关于切入表达式:
execution()里面的内容
execution( [修饰符] 返回值类型 [类的全限定名.]方法名(参数) )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值