spring-aop示例

具体案例放在github上,主要是jar包在上面

https://github.com/guoyansi/spring-aop-example

knights.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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

        <bean id="knight" class="p1.BraveKnight">
            <constructor-arg ref="quest" />
        </bean>
        <bean id="quest" class="p1.SlayDragonQuest"></bean>

        <bean id="minstrel" class="p1.Minstrel"></bean>

        <aop:config>
            <aop:aspect ref="minstrel">
                <aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(..))" />
                <aop:before pointcut-ref="embark" method="singBeforeQuest"/>
                <aop:after pointcut-ref="embark" method="singAfterQuest"/>
            </aop:aspect>
        </aop:config>
</beans>

IQuest.java

package p1;

/**
 * 探险
 *
 */
public interface IQuest {
    void embark();
}

IKnight.java

package p1;

public interface IKnight {
    void embarkOnQuest();
}

BraveKnight.java

package p1;

/**
 * 骑士
 *
 */
public class BraveKnight implements IKnight{
    private IQuest quest;

    public BraveKnight(IQuest quest){
        this.quest=quest;

    }
    @Override
    public void embarkOnQuest (){
        quest.embark();
    }

}

SlayDragonQuest.java

package p1;

public class SlayDragonQuest implements IQuest{
    @Override
    public void embark() {
        System.out.println("SlayDragonQuest的embark......");
    }
}

Minstrel.java

package p1;

public class Minstrel {
    public void singBeforeQuest(){
        System.out.println("探险之前...");
    }
    public void singAfterQuest(){
        System.out.println("探险之后......");
    }

}
package p1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Run {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("classpath*:knights.xml");
        IKnight knight=(IKnight)context.getBean("knight");
        knight.embarkOnQuest();
    }
}

执行run的结果:

上面是一个完整的例子.如果没有commons-logging.jar

控制台上的那些红色字样就不会输出,还会出现异常.

如果没有aopalliance.jar:

nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

如果没有aspectjweaver.jar

nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException

时间: 2024-07-31 18:14:53

spring-aop示例的相关文章

基于注解的Spring AOP示例

基于注解的Spring AOP示例 目录 在XML配置文件中开启 @AspectJ 支持 声明切面及切入点 声明通知 测试 结语 在XML配置文件中开启 @AspectJ 支持 要使用Spring的AOP,首先要在 applicationContext.xml 配置文件中添加如下内容: <!-- 启动@Aspectj --> <aop:aspectj-autoproxy/> 声明切面及切入点 在Spring中, 切面 就是使用 @Aspect 注解的类.而 切入点 则由两部分组成:

Spring AOP示例代码

public interface CustomerDao { public void save(); public void update(); } public class CustomerDaoImpl implements CustomerDao { public void save() { // 模拟异常 // int a = 10/0; System.out.println("保存客户..."); } public void update() { System.out.pri

Spring aop 简单示例

简单的记录一下spring aop的一个示例 基于两种配置方式: 基于xml配置 基于注解配置 这个例子是模拟对数据库的更改操作添加事物 其实并没有添加,只是简单的输出了一下记录 首先看下整个例子的目录图 全部代码就不贴了,数目有点多,不过很简单,看一部分就能够明白 第一种配置方式 基于xml方式配置 首先将service,dao注册到spring容器 配置一下扫描包还是很方便的 接下来看下service 1 package com.yangxin.core.service.impl; 2 3

Spring AOP的简单示例

配置文件 <?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:context="http://www.springframework.or

spring aop 原理

http://blog.csdn.net/moreevan/article/details/11977115 Spring AOP 实现原理 2013-09-24 15:23 79554人阅读 评论(11) 收藏 举报  分类: spring(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)

JavaEE学习之Spring aop

一.基本概念 AOP——Aspect-Oriented Programming,面向切面编程,它是spring框架的一个重要组成部分.一般的业务逻辑都有先后关系,我们可以理解为纵向关系,而AOP关注的是横向关系,每一个关注点可以理解为一个横切面.例如我们的大部分代码都会涉及到日志记录,很多的数据库操作都会涉及到事务的创建和提交.那么从横向关注这些逻辑,他们都一个个的切面. AOP技术的具体实现,可以通过动态代理技术或者是在程序编译期间进行静态的"织入"方式.AOP经常使用的场景包括:日

Spring AOP 实现原理(二) 使用 Spring AOP

与 AspectJ 相同的是,Spring AOP 同样需要对目标类进行增强,也就是生成新的 AOP 代理类:与 AspectJ 不同的是,Spring AOP 无需使用任何特殊 命令对 Java 源代码进行编译,它采用运行时动态地.在内存中临时生成"代理类"的方式来生成 AOP 代理. Spring 允许使用 AspectJ Annotation 用于定义方面(Aspect).切入点(Pointcut)和增强处理(Advice),Spring 框架则可识别并根据这些 Annotati

java框架篇---spring AOP 实现原理

什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无

Spring AOP 实现原理

什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无

Spring Aop详尽教程

一.概念 AOP(Aspect Oriented Programming):面向切面编程. 面向切面编程(也叫面向方面编程),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 二.用途 日志记录,性能统计,安全控制,权限管理,事务处理,异常处理,资源池管理. 三.详解 注意:代码请见下篇博文 1. 切面(Aspect) 官方的抽象定义为“一个关注点的模块