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框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可维护性和可扩展性。在实际项目中,结合...
在Spring中,切面可以通过`@Aspect`注解的类来表示,如`org.springframework.aop.aspectj.annotation.AnnotationAspectAdapter`。 3. **通知(Advice)**:通知是切面中定义的行为,包括前置通知、后置通知、异常...
标题“spring-aop-aspectj-case”涉及到的是Spring框架中的AOP(面向切面编程)与AspectJ的集成使用案例。在Spring框架中,AOP用于处理系统中的横切关注点,如日志、事务管理等,而AspectJ则是一个强大的、独立的...
标题 "spring-aop-aspectj(Schema)-case" 指涉的是Spring AOP(面向切面编程)中使用AspectJ的Schema配置方式的一个案例。Spring AOP是Spring框架的一部分,它允许我们在不修改源代码的情况下,通过"切面"来实现对...
5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能影响到何时以及如何调用通知。例如,直接通过`@Autowired`注入的bean之间的相互调用不会触发AOP通知,除非显式地通过代理引用进行调用。 6. *...
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(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...
本话题将围绕标题和描述中提到的四个关键库: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 3.2.8版本中实现AOP。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定的连接点(Join Point)执行的代码,...
AspectJ是AOP的一个独立实现,Spring AOP通过这个包支持AspectJ的注解和字节码级别的切面定义,使得编写切面更为直观。 Spring AOP的工作原理如下: - **代理模式**:Spring AOP通过代理对象拦截对目标对象的调用,...
2. **Spring AOP实现方式** - **代理模式**:Spring AOP主要通过代理实现,有JDK动态代理和CGLIB代理两种。JDK代理用于接口实现类,CGLIB代理则用于没有接口的类。 - **注解驱动**:使用`@Aspect`、`@Before`、`@...
在这个例子中,我们将深入探讨Spring AOP中的前置通知、后置通知以及环绕通知的实现方式。 前置通知(Before Advice)在目标方法执行前触发,通常用于执行验证、初始化等操作。在Spring AOP中,我们可以使用`@...
在实际应用中,Spring AOP会根据目标对象是否实现接口来选择使用哪种代理方式。如果目标对象实现了接口,那么默认会选择JDK动态代理,否则使用CGLIB代理。 博文链接中提到的是作者“mofeichen”在iteye博客上分享的...
Spring AOP与AspectJ的结合使用,让开发者能够方便地实现日志记录、事务管理、性能监控等横切关注点。例如,通过定义一个切面,可以集中处理所有数据库操作的事务管理,而无需在每个操作方法中手动进行事务控制。...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、安全性等,从而解耦应用程序的核心业务逻辑。在Spring AOP中,关注点被模块化为独立的“切面”...
总之,`aspectjweaver.jar`和`aspectjrt.jar`对于Spring AOP的实现至关重要,它们使得Spring能够充分利用AspectJ的强大功能,实现更灵活、更全面的面向切面编程。在使用Spring AOP时,确保正确导入这两个库,可以...
切点由`org.springframework.aop.aspectj.annotation.AnnotationMethodPointcut`等类实现,它们通常基于注解(如`@Before`、`@After`等)来定义。 五、切面(Aspect) 切面是通知和切点的组合,它定义了关注点如何...
3. **AOP的实现** - **AspectJ**:语言级别的AOP实现,扩展Java语法,支持编译时织入。 - **AspectWerkz**:轻量级AOP框架,支持运行时或类加载时织入。 - **Spring AOP**:基于纯Java实现,运行时通过动态代理...