`

Spring 面向切面(XML)

 
阅读更多

Maven配置文件

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.jinglun</groupId>
  <artifactId>SpringInAction</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SpringInAction Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- Spring集成Junit-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.1.0</version>
        <scope>test</scope>
    </dependency>
    
    <!-- Spring Aop -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.4</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.11</version>
    </dependency>
    
    <!-- Spring MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <!-- Spring Core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>SpringInAction</finalName>
  </build>
</project>

 

 

通知类:

Audience.java

package concert;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class Audience {
    
    public void silenceCellPhones() {
        System.out.println("Silencing cell phones");
    }
    
    public void takeSeats() {
        System.out.println("Taking seats");
    }
    
    public void applause() {
        System.out.println("CLAP CLAP CLAP!!!");
    }
    
    public void demandRefund() {
        System.out.println("Demanding a refund");
    }

    public void watchPerformance(ProceedingJoinPoint jp) {
        try {
            System.out.println("Arround Start");
            jp.proceed();
            System.out.println("Arround End");
        } catch (Throwable e) {
            System.out.println("Demanding a refund");
        }
    }
}

 

切点:

Performance.java

package concert;

public interface Performance {
    public void perform();
}

 

PerformanceImpl.java

package concert;

import org.springframework.stereotype.Component;

@Component
public class PerformanceImpl implements Performance{

    public void perform() {
        System.out.println("perform");
    }
}

 

XML配置:

spring-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <context:component-scan base-package="concert" />

    <aop:aspectj-autoproxy />

    <bean id="audience" class="concert.Audience"/>

    <aop:config>
        <aop:aspect ref="audience">
            <aop:pointcut 
                id="performance"
                expression="execution(* concert.Performance.perform(..))" />
            <aop:before
                pointcut-ref="performance"
                method="silenceCellPhones" />
            <aop:before
                pointcut-ref="performance"
                method="takeSeats" />
            <aop:after-returning
                pointcut-ref="performance"
                method="applause" />
            <aop:after-throwing
                pointcut-ref="performance"
                method="demandRefund" />
            <aop:around 
                pointcut-ref="performance"
                method="watchPerformance" />
        </aop:aspect>
    </aop:config>
</beans>

 

测试类:

PerformTest.java

package concert;

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-service.xml"})
public class PerformTest {
    
    @Autowired
    private Performance perform;
    
    @Test
    public void play() {
        perform.perform();
        assertNotNull(perform);
    }
}

 

 

分享到:
评论

相关推荐

    spring使用动态代理面向切面编程(AOP) xml

    在Spring框架中,面向切面...总之,Spring的面向切面编程通过XML配置提供了灵活、强大的方式来管理和插入横切关注点,从而提高代码的可读性和可维护性。理解和掌握这部分知识对于任何Spring开发者来说都是至关重要的。

    Spring面向切面编程AOP

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...

    Spring面向切面编程示例代码

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...

    AOP_使用spring框架进行面向切面编程

    面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...

    spring面向切面

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架中的一个重要概念,它旨在通过将关注点分离,提高代码的可维护性和模块化。在传统的面向对象编程中,我们通常将业务逻辑和横切关注点(如日志、事务...

    Spring Aop面向切面的java代码

    Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。面向切面编程(Aspect Oriented Programming,AOP)的核心思想是将关注...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    spring aop 自定义切面示例

    在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...

    面向切面 aop

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,易于维护和扩展。在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横...

    spring切面小例子

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理、性能监控等。本示例将深入探讨如何在Spring中实现AOP,特别是通过注解的方式。...

    spring-aop面向切面系统日志案例

    在IT行业中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它使得我们能够以一种声明式的方式处理系统中的横切关注点,如日志记录、事务管理、性能监控等。这个“spring-...

    面向切面编程aop简介

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...

    spring的aop切面编程实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...

    spring4 AOP 面向切面编程@Aspect

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    Spring AOP是Spring框架的一个重要特性,它实现了面向切面编程,允许开发者定义“切面”,即关注点的模块化,比如日志记录、性能监控、安全控制等。切面通过通知(advises)来增强其他对象的行为。Spring支持多种...

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

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

    Spring-AOP java2ee中的Spring框架的面向切面示例

    在Java企业级开发中,Spring框架是一个不可或缺的重要组件,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程(AOP)、数据访问/集成、Web应用、事务管理等。本示例主要聚焦于Spring框架的面向切面编程(AOP...

    面向切面的编程(AOP)及在Spring中的应用

    总的来说,面向切面编程AOP是一种强大的设计模式,它通过Spring框架的实现,使得在Java应用中实现关注点分离变得更加容易。正确地运用AOP,可以极大地提升代码的整洁性和可维护性,同时降低系统的复杂度。

    spring xml 实现aop切面编程

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(DI)和面向切面编程(AOP)功能而闻名。本篇文章将详细讲解如何通过XML配置实现Spring AOP的切面编程,帮助初学者理解这一核心特性。 首先,我们要...

    Spring 4.0 AOP 面向切面Maven测试程序

    Spring 4.0 AOP(面向切面编程)是Spring框架中的一个重要组成部分,它允许开发者在不修改原有代码的情况下,通过插入额外的行为来增强或监控应用程序。AOP的核心概念是切面(Aspect),它封装了跨越多个对象的业务...

Global site tag (gtag.js) - Google Analytics