AOP之注解方式

AOP已经在上一篇文章中做了宏观介绍,那AOP在Spring中如何实现,大家是不是很好奇。接下来我们将介绍其中的一种实现方式--》注解方式。

代码如下:

//Manager接口:

packagecom.huxj.spring;
 
publicinterface UserManager {
publicvoid addUser();
 
}

//ManagerImpl实现:

publicclass UserManagerImpl implements UserManager {
 
//1.操作时都要进行安全检查
@Override
publicvoid addUser() {
//                checkSecurity();
System.out.println("---UserManagerImpl.addUser()----");
 
}
}
 <span style="font-family: Calibri; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>

//配置文件:

  

   <!-- 启用Aspect对Annotation的支持 -->     
     <aop:aspectj-autoproxy />
            <beanid="userManager"class="com.huxj.spring.UserManagerImpl"/>
            <beanid="securityHandler"class="com.huxj.spring.SecurityHandler"/>

 通过"<aop:aspectj-autoproxy/>"启用注解,通过配置目标类和模块化类Ioc容器会自动创建对象和管理他们之间的关系,最终的效果就是当程序运行时,我们仍然是动态代理的方式来实现我们的操作。

//横切性关注点模块化

//将安全性独立服务(横切性关注点)模块化,
@Aspect
publicclass SecurityHandler {
 
//安全性检查的范围,也就是ponitCut;
//execution(*add*(..)标示检查范围,第一个“*”返回值任意,第二个“*”以add开头的方法,“..”参数任意
//addMethod()是一个标示,的目的是为了找到@Pointcut注解,即方法作用范围
@Pointcut("execution(*add*(..))")
privatevoid addMethod(){};
 
//安全性检查方法,即横向性切入点(crossCuttingConcern).定义advice,然后服务与我们的joinpoint上。
@Before("addMethod()")
privatevoid checkSecurity() {
System.out.println("-------checkSecurity-------");
}        
}

在模块类里面,定义横向切入点;然后通过advice注解的确定其在joinPont的位置;通过一个标识方法(没有实际的意义)

通过execution来确定横向切入点的范围

 

//客户端:

packagecom.huxj.spring;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
 
publicclass Client {
 
/**
 * @param args
 */
publicstatic void main(String[] args) {
BeanFactorybeanFactory=newClassPathXmlApplicationContext("applicationContext-*.xml");
UserManageruserManager=(UserManager) beanFactory.getBean("userManager");
userManager.addUser();
}        
}

运行结果::

 

-------checkSecurity-------

---UserManagerImpl.addUser()----

 

 

总结:

我们的程序采用AOP采用注解的方式,把独立服务在程序运行的时候切入到程序中。实现的核心思想是动态代理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值