Spring整理11 -- 面对切面(AOP)1 -- 注解配置的方式实现AOP

AOP是使用动态代理而现实的,在上面动态代理中,我们可以想一下几个概念,我们写一个验证方法,在现实类中我们在拿几个方法中应用这个方法。那在Spring AOP中是如何表述这些概念?

下面先来看AOP中几个比较重要的概念:

²        切面(Aspect)

切面,对象操作过程中的截面。这可能是AOP中最关键的一个术语。例如,我们上面介绍的用户权限验证,不同身份的用户可以做什么,不可以做什么,均由这个模块加以判定。而这个模块调用的位置通常也比较固定:用户发起请求之后,执行业务逻辑之前。

²        连接点(JoinPoint)

程序运行过程中的某个阶段点。如某个方法调用,或者某个异常被抛出。

²        处理逻辑(Advice)

在某个连接点所采用的处理逻辑,处理逻辑的调用模式通常有三种:

1.  Around

在连接点前后插入预处理过程和后处理过程。

2.  Before

仅在连接点之前插入预处理过程。

3.  Throw

在连接点抛出异常时进行异常处理。

²        切点(PointCut)

一系列连接点的集合,它指明处理方式(Advice)将在何时被触发。

1.1. 采用注解配置的方式实现AOP
下面我们来介绍一个用注解库来实现spring AOP,来讲解AOP相关概念。

步骤:

1)        添加spring相关依赖库

* SPRING_HOME/dist/spring.jar

* SPRING_HOME/lib/jakarta-commons/commons-logging.jar

* SPRING_HOME/lib/log4j/log4j-1.2.14.jar

* SPRING_HOME/lib/aspectj/*.jar

2)        采用Aspect定义切面

3)        在Aspect定义Pointcut和Advice

4)        启用AspectJ对Annotation的支持并且将Aspect类和目标对象配置到Ioc容器中

 

例子我们还是基于上面动态代理的那个例子,代码如下:

使用注解配置AOP类,SecurityHandler.java

/**

 * 定义Aspect

 */

@Aspect

public class SecurityHandler {

    

    /**

     * 定义Pointcut,Pointcut的名称就是allAddMethod,

* 此方法不能有返回值和参数,该方法只是一个

     * 标识

     * Pointcut的内容是一个表达式,描述那些对象的那些方法(订阅Joinpoint)

     */

    @Pointcut("execution(* add*(..)) || execution(* del*(..))")

    private void allAddMethod(){};  

    /**

     * 定义Advice,标识在那个切入点何处织入此方法

     */

    @Before("allAddMethod()")

    private void checkSecurity() {

       System.out.println("------checkSecurity()------");

    }

    

}

  


applicationContext.xml:

<aop:aspectj-autoproxy/><!-- 启动使用注解配置AOP支持 -->

<bean id="securityHandler" class="spring.SecurityHandler"/>           

<bean id="userManager" class="spring.UserManagerImpl"/>

 
 


UserManager.java

public interface UserManager {

 

    public void addUser(String username, String password);  

    public void deleteUser(int id); 

    public void modifyUser(int id, String username, 

String password);  

    public String findUserById(int id);

}

 
 


UserManagerImpl.java

public class UserManagerImpl implements UserManager {

    public void addUser(String username, String password) {     

       System.out.println("----UserManagerImpl.addUser()------");

    }

 

    public void deleteUser(int id) {       

       System.out.println("------UserManagerImpl.deleteUser()---");

    }

 

    public String findUserById(int id) {       

       System.out.println("----UserManagerImpl.findUserById()--");

       return null;

    }

 

   public void modifyUser(int id, String username, String password) { 

   System.out.println("-------UserManagerImpl.modifyUser()--");

    }

}
 

 
测试端代码:

public class Client {

    public static void main(String[] args) {

       BeanFactory factory = new 

ClassPathXmlApplicationContext("applicationContext.xml");

       

       UserManager userManager = 

(UserManager)factory.getBean("userManager");

       userManager.addUser("张三", "123");

    }

}

 

打印信息:

-------checkSecurity()---------------

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

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值