`
无量
  • 浏览: 1142315 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring-AOP实现方式(3----AspectJ的AOP实现)

阅读更多
AspectJ的AOP实现

配置文件中的配置
1、增加对注解名空间和schema的支持
xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd


2、增加AOP的XML名空间和schema的支持
xmlns:aop="http://www.springframework.org/schema/aop"

http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd


3、增加自动扫描注解和使用AspectJ自动代理支持
<context:annotation-config/>
<context:component-scan base-package="com.hank"/>

<aop:aspectj-autoproxy/>


java代码方面
4、编写切面类
@Aspect   //声明为切面
@Component   //声明为组件
public class UserAspectJProxy {
@Before("execution(public void com.hank.dao.impl.UserDaoImpl.*User())")
public void before() {
System.out.println("------before execute method------");
}

@AfterReturning("execution(public void com.hank.dao.impl.UserDaoImpl.*User())")
public void after() {
System.out.println("------after execute method------");
}
}


具体实现如下


具体代码:
配置文件
<?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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<context:annotation-config/>
	<context:component-scan base-package="com.hank"/>

	<aop:aspectj-autoproxy/>

	<!-- 1.定义具体被代理类 -->
	<bean id="userDaoImpl" class="com.hank.dao.impl.UserDaoImpl"/>
</beans>

被代理的具体的类:
package com.hank.dao.impl;
import com.hank.dao.UserDao;

public class UserDaoImpl implements UserDao{
	public void saveUser() {
		System.out.println("保存用户信息。。。。。。");
	}

	public void queryUser() {
		System.out.println("查看用户信息。。。。。。");
	}
}


被代理类实现的接口类
package com.hank.dao;

public interface UserDao {
	//保存用户信息
	public void saveUser();
	//查看用户信息
	public void queryUser();
}


代理类,拦截处理类
package com.hank.proxy;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect        //声明为注解
@Component     //声明为组件
public class UserDaoAspectJProxy {
	
	@Before("execution(public void com.hank.dao.impl.UserDaoImpl.*User())")
	public void before() {
		System.out.println("------before execute method-----------");
	}
	
	@AfterReturning("execution(public void com.hank.dao.impl.UserDaoImpl.*User())")
	public void after() {
		System.out.println("------after execute method-----------");
	}
}

测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hank.dao.UserDao;
import junit.framework.TestCase;

public class TestAopByAspectJProxy extends TestCase{
	public void test1() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao)ctx.getBean("userDaoImpl");
		userDao.saveUser();
	}
}



输出结果
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
------before execute method-----------
保存用户信息。。。。。。
------after execute method-----------


注:代理类,拦截类,可以写成如下形式,更加简洁
package com.hank.proxy;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect        //声明为注解
@Component     //声明为组件
public class UserDaoAspectJProxy {
	
	@Pointcut("execution(public void com.hank.dao.impl.UserDaoImpl.*User())")
	public void doFilter() {
		
	}
	
	@Before("doFilter()")
	public void before() {
		System.out.println("------before execute method-----------");
	}
	
	@AfterReturning("doFilter()")
	public void after() {
		System.out.println("------after execute method-----------");
	}
}



  • 大小: 75.5 KB
分享到:
评论

相关推荐

    spring-aop-jar

    总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可维护性和可扩展性。在实际项目中,结合...

    spring-aop.jar

    在Spring中,切面可以通过`@Aspect`注解的类来表示,如`org.springframework.aop.aspectj.annotation.AnnotationAspectAdapter`。 3. **通知(Advice)**:通知是切面中定义的行为,包括前置通知、后置通知、异常...

    spring-aop-aspectj-case

    标题“spring-aop-aspectj-case”涉及到的是Spring框架中的AOP(面向切面编程)与AspectJ的集成使用案例。在Spring框架中,AOP用于处理系统中的横切关注点,如日志、事务管理等,而AspectJ则是一个强大的、独立的...

    spring-aop-aspectj(Schema)-case

    标题 "spring-aop-aspectj(Schema)-case" 指涉的是Spring AOP(面向切面编程)中使用AspectJ的Schema配置方式的一个案例。Spring AOP是Spring框架的一部分,它允许我们在不修改源代码的情况下,通过"切面"来实现对...

    spring-boot aop

    5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能影响到何时以及如何调用通知。例如,直接通过`@Autowired`注入的bean之间的相互调用不会触发AOP通知,除非显式地通过代理引用进行调用。 6. *...

    spring-aop-annotation-log-all

    spring-aop-4.0.4.RELEASE.jar com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aspects-4.1.2.RELEASE.jar ...

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

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

    aopalliance-1.0、aspectjweaver-1.8.10、spring-aop-4.3.6.RELEASE、spring-aspects-4.3

    本话题将围绕标题和描述中提到的四个关键库:aopalliance-1.0、aspectjweaver-1.8.10、spring-aop-4.3.6.RELEASE以及spring-aspects-4.3.6.RELEASE,探讨它们在Java AOP实现中的角色。 首先,aopalliance-1.0是AOP...

    spring-aop实例demo

    本实例将详细介绍如何在Spring 3.2.8版本中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定的连接点(Join Point)执行的代码,...

    spring-aop

    AspectJ是AOP的一个独立实现,Spring AOP通过这个包支持AspectJ的注解和字节码级别的切面定义,使得编写切面更为直观。 Spring AOP的工作原理如下: - **代理模式**:Spring AOP通过代理对象拦截对目标对象的调用,...

    AOP.rar-Spring-AOP源码Demo

    2. **Spring AOP实现方式** - **代理模式**:Spring AOP主要通过代理实现,有JDK动态代理和CGLIB代理两种。JDK代理用于接口实现类,CGLIB代理则用于没有接口的类。 - **注解驱动**:使用`@Aspect`、`@Before`、`@...

    Spring-AOP(前置/后置/环绕)通知的例子

    在这个例子中,我们将深入探讨Spring AOP中的前置通知、后置通知以及环绕通知的实现方式。 前置通知(Before Advice)在目标方法执行前触发,通常用于执行验证、初始化等操作。在Spring AOP中,我们可以使用`@...

    spring-aop AND proxy

    在实际应用中,Spring AOP会根据目标对象是否实现接口来选择使用哪种代理方式。如果目标对象实现了接口,那么默认会选择JDK动态代理,否则使用CGLIB代理。 博文链接中提到的是作者“mofeichen”在iteye博客上分享的...

    spring-aop.jar+aspectjrt.jar+aspectjweaver.jar

    Spring AOP与AspectJ的结合使用,让开发者能够方便地实现日志记录、事务管理、性能监控等横切关注点。例如,通过定义一个切面,可以集中处理所有数据库操作的事务管理,而无需在每个操作方法中手动进行事务控制。...

    spring-aop实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、安全性等,从而解耦应用程序的核心业务逻辑。在Spring AOP中,关注点被模块化为独立的“切面”...

    Spring-AOP需要的外部包

    总之,`aspectjweaver.jar`和`aspectjrt.jar`对于Spring AOP的实现至关重要,它们使得Spring能够充分利用AspectJ的强大功能,实现更灵活、更全面的面向切面编程。在使用Spring AOP时,确保正确导入这两个库,可以...

    spring-aop源码

    切点由`org.springframework.aop.aspectj.annotation.AnnotationMethodPointcut`等类实现,它们通常基于注解(如`@Before`、`@After`等)来定义。 五、切面(Aspect) 切面是通知和切点的组合,它定义了关注点如何...

    Spring-AOP .pptx

    3. **AOP的实现** - **AspectJ**:语言级别的AOP实现,扩展Java语法,支持编译时织入。 - **AspectWerkz**:轻量级AOP框架,支持运行时或类加载时织入。 - **Spring AOP**:基于纯Java实现,运行时通过动态代理...

Global site tag (gtag.js) - Google Analytics