`
newchq
  • 浏览: 55037 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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()-----

分享到:
评论

相关推荐

    spring-aop-jar

    在Spring AOP中,切面可以通过注解或XML配置来定义。 - 连接点(Join Point):连接点是程序执行过程中的一个特定点,例如方法的调用或字段的访问。 - 切入点(Pointcut):切入点是连接点的集合,定义了切面将在...

    spring aop注解方式、xml方式示例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...

    Spring mvc mybatis plus 实现AOP 切面日志系统

    本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志记录框架,能够自动追踪和记录应用程序的关键操作,同时支持数据持久化到数据库中,方便后期分析和问题排查。下面将详细介绍这些技术...

    使用Spring的注解方式实现AOP的细节

    在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...

    spring-boot aop

    Spring Boot AOP(面向切面编程)是一种强大的设计模式,它允许我们在不修改现有代码的情况下,插入额外的功能或监控代码。在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在...

    day39-Spring 06-Spring的AOP:带有切点的切面

    在"day39-Spring 06-Spring的AOP:带有切点的切面"这个主题中,我们将深入探讨如何在Spring中实现带有切点的切面,以及它们如何与源码和工具结合使用。 首先,理解AOP的基本概念非常重要。AOP的核心是切面(Aspect...

    Spring AOP面向切面三种实现

    Spring AOP提供了三种实现方式:代理模式、AspectJ切面和注解驱动的切面。 1. **代理模式** Spring AOP的基础是动态代理,它可以创建目标对象的代理对象来实现切面功能。有两种代理方式:JDK动态代理和CGLIB代理。...

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    Spring AOP(面向切面编程)是 Spring 框架的一个重要部分,它允许开发者在不修改源代码的情况下,实现跨切面的关注点,如日志、事务管理等。`spring-aop-3.0.xsd` 是 Spring AOP 的 XML 配置文件,定义了与 AOP ...

    关于Spring的spring-beans-xsd和tx-xsd aop-xsd等

    3. **spring-aop-3.0.xsd**:Spring的AOP(面向切面编程)模块提供了在不修改代码的情况下添加额外行为的能力。这个XSD文件定义了如`&lt;aop:config&gt;`、`&lt;aop:advisor&gt;`、`&lt;aop:pointcut&gt;`等元素,用于创建切面、定义...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    Spring4--2.bean注解和AOP

    在Spring框架中,Bean注解和AOP(面向切面编程)是两个核心概念,它们在实际开发中扮演着至关重要的角色。让我们深入探讨这两个主题。 首先,我们来看Bean注解。在Spring 4中,注解是配置Bean的主要方式,它提供了...

    spring-aop-4.0.0.RELEASE

    Spring AOP 4.0.0.RELEASE版本为开发者带来了更强大的面向切面编程能力,尤其在注解装配方面,极大地提升了开发效率。理解并掌握这些核心概念和实践技巧,能够帮助我们更好地利用Spring AOP构建健壮且易于维护的...

    spring切面AOP所使用的jar包

    Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...

    SSM整合-用springaop-demo01实现了注解AOP,SSM-MybatisOneForOne-demo01实现了

    - **注解AOP**:在`springaop-demo01`中,使用了注解来声明切面。比如`@Aspect`定义一个切面类,`@Before`、`@After`、`@Around`、`@Pointcut`等注解用于定义通知(Advice)和切入点(Pointcut)。 - **配置AOP**...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    Spring-Struts-IBatis-AOP-Transaction

    在 SSI 集成中,IBatis 作为数据库操作的桥梁,通过 XML 或注解配置 SQL 语句,实现与数据库的交互。 **AOP(面向切面编程)** 面向切面编程是一种编程范式,它允许开发者将关注点分离,如日志、事务管理等,从...

    spring----AOP实现

    Spring AOP为开发者提供了灵活的切面编程能力,使得关注点分离得以实现,降低了代码耦合度,提升了代码质量。通过理解并熟练运用AOP,我们可以更高效地编写和维护复杂的应用程序。在SpringAOPProject中,你可以找到...

    spring-aop-4.2.6.RELEASE.zip

    1. **增强的注解支持**:Spring AOP 4.2.6.RELEASE对基于注解的切面进行了强化,允许开发者使用@Aspect注解定义切面,使用@Before、@After、@Around等注解定义通知(advisors),极大地简化了代码编写。 2. **更...

    草稿:SSM整合-用springaop-demo01实现了注解AOP,SSM-MybatisOneForOne-demo01实现

    总结来说,"springaop-demo01"展示了如何在Spring框架中使用注解AOP进行切面编程,实现对业务代码的透明增强;而"SSM-MybatisOneForOne-demo01"则展示了在SSM整合中,如何通过MyBatis的一对一映射处理两个表之间的...

Global site tag (gtag.js) - Google Analytics