`

使用AspectJ来产生动态代理

阅读更多

AOP的实现者:

     AspectJ ,  AspectWerkz,  JBoss AOP,  Spring AOP.

     在Spring2.0中,Spring AOP , IoC和AspectJ整合到一起了。

要理解AOP就必须要先知道动态代理,Spring AOP底层使用了两种代理机制:一种是基于JDK的动态代理;一种是基于CGLib的动态代理。之所以要有两种代理机制,很大程度上是因为JDK本身只提供接口的代理,而不支持类的代理。

 

看api理解那几个专业名词

下面就是一个AspectJ产生代理的一个例子

 

先要让程序支持AspectJ,看bean.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: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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.lbx"/>
 	<aop:aspectj-autoproxy />
 	
</beans>

 

需要在目标类中方法执行前加入的处理(相当于拦截器)@AspectJ

注意:一定要加@Componnent

package com.lbx.aop;

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

@Aspect
@Component
public class LogInterceptor {
	
	@Before("execution(public void com.lbx.dao.impl.UserDaoImpl.add(com.lbx.po.User))")
	public void before(){
		System.out.println("LogInterceptor.before()");;
	}
	
}	

 

 

 

其他的类

package com.lbx.service.impl;


import javax.annotation.Resource;

import org.springframework.stereotype.Component;


import com.lbx.dao.UserDao;
import com.lbx.po.User;
import com.lbx.service.UserService;

@Component("userService")
public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	public void add(User user) {
		userDao.add(user);
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	@Resource(name="userDao")   //最好用@Resource 不要用@Autowired
	public void setUserDao( UserDao userDao) { 
		this.userDao = userDao;
	}
}

 

package com.lbx.dao.impl;

import org.springframework.stereotype.Component;

import com.lbx.dao.UserDao;
import com.lbx.po.User;

@Component("userDao")   //UserDaoImpl
public class UserDaoImpl implements UserDao {

	public void add(User user) {
		// TODO Auto-generated method stub
		System.out.println("一个user添加进来");
	}

}

  

 

分享到:
评论

相关推荐

    AspectJ_sample:AspectJ示例

    这通常需要一些额外的配置,例如使用AspectJ的Java Agent或者Spring AOP的代理模式。LTW的优点是灵活性,因为可以在不重新编译或部署应用程序的情况下添加或修改切面。 4. **编译时编织(Compile-Time Weaving, CTW...

    carbon-logging:Carbon日志记录-AspectJ,动态代理和Cglib的声明式日志记录

    过去的经验使我们确信,这些不仅是为性能调整和生产支持而捕获的最关键的日志记录类型,而且还包括搜索功能,这些实现的执行通常会对代码库产生重大影响。 碳测井解决了一个始终困扰生产支持情况的关键问题。 它...

    aspectjrt和aspectjweaverjar包

    4. 切面定义:通过使用AspectJ的特定语法(如pointcut和advice)来定义切点和通知,以控制何时以及如何织入切面。 总之,AspectJRT和AspectJWeaver为Java开发者提供了一种强大的工具,用于实现面向切面编程,提升...

    SSM中事务管理所需的jar包-aspectjweaver

    通常,我们会使用`&lt;tx:annotation-driven&gt;`标签来激活基于注解的事务管理,并通过`&lt;aop:aspectj-autoproxy&gt;`启用AOP代理。 5. **事务注解**:在业务层(Service层)的方法上,我们可以使用如`@Transactional`注解来...

    Spring AOP DEMO

    你可以使用表达式语言(如AspectJ的@Pointcut注解)来定义切点。 5. **织入(Weaving)**:织入是将切面应用到目标对象,创建代理对象的过程。Spring支持三种织入方式:编译时、加载时和运行时。在DEMO中,我们可能...

    Spring AOP demo (maven)

    你可以选择使用JDK动态代理或CGLIB代理。JDK代理适用于接口实现类,而CGLIB代理则用于没有接口的类。 ```xml &lt;aop:aspectj-autoproxy /&gt; &lt;!-- 或者使用CGLIB代理 --&gt; ``` 3. **定义切面**:创建一个Java类,该...

    Spring in Action(第2版)中文版

    8.5.4使用xfire客户端代理web服务 8.6小结 第9章在spring中建立契约优先web服务 9.1介绍spring-ws 9.2定义契约(首先!) 9.3使用服务端点处理消息 9.3.1建立基于jdom消息的端点 9.3.2序列化消息载荷 9.4合并...

    Spring in Action(第二版 中文高清版).part2

    4.3.2 自动代理@AspectJ切面 4.4 定义纯粹的POJO切面 4.5 注入AspectJ切面 4.6 小结 第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的...

    Spring in Action(第二版 中文高清版).part1

    4.3.2 自动代理@AspectJ切面 4.4 定义纯粹的POJO切面 4.5 注入AspectJ切面 4.6 小结 第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的...

    Spring.3.x企业应用开发实战(完整版).part2

    7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() ...

    Spring3.x企业应用开发实战(完整版) part1

    7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 7.5.1 @annotation() ...

    Springaop原理及各种应用场景

    静态代理通常在编译时通过AOP框架产生的代理类来实现,如AspectJ,它可以在编译阶段增强源代码。动态代理则在运行时生成,如Spring AOP中利用JDK动态代理或CGLIB。JDK动态代理适用于实现了接口的目标对象,而CGLIB则...

    springBoot - 使用Aop统计方法时间

    注意,这种方法虽然简单易用,但在高并发场景下可能会对性能产生一定影响,因为它会增加每次方法调用的开销。在生产环境中,如果需要精确的性能数据,建议使用专门的性能监测工具,如JProfiler或VisualVM。

    Spring声明式事务和@Aspect的拦截顺序问题的解决

    2. 根据 Bean 中的 AspectJ 注解自动创建代理,实现类 AnnotationAwareAspectJAutoProxyCreator 3. 根据 Advisor 的匹配机制自动创建代理,实现类 DefaultAdvisorAutoProxyCreator 其中,@Aspect 声明的 AOP 是通过...

    菜鸟 Spring 源码解读 推荐流程

    1. **了解设计模式**:Spring框架广泛使用了工厂模式、单例模式、代理模式等设计模式,理解这些模式是解析源码的基础。 2. **研究核心接口**:例如BeanFactory和ApplicationContext,理解它们的职责和实现方式。 3. ...

    Spring中基于xml的AOP的详细步骤

    6. Proxy:代理,一类类被Aop织入增强后,就产生一个结果代理类。 7. Aspect:切面,是切入点和通知的结合。 8. Introduction:引介,是一种特殊的通知,在不修改类代码的前提下,Introduction可以在运行期为类动态...

    spring4.1核心包

    8. spring-instrument-4.1.1.RELEASE.jar Spring对服务器的代理接口 9.spring-instrument-tomcat-4.1.1.RELEASE.jar Spring对tomcat连接池的集成 10. spring-jdbc-4.1.1.RELEASE.jar 对jdbc简单封装 11.spring-jms-...

    面向方面编程_AOP_介绍.pdf

    #### 一、面向方面编程产生的背景 在软件开发领域,面向对象编程(OOP)是长期以来的主要编程范式之一。然而,在实际的软件开发过程中,经常会遇到一些跨越多个类或模块的关注点,如日志记录、安全性检查、事务管理等...

    J2EE应用开发详解

    37 3.5 动态代理 39 3.6 反射机制在Hibernate中的应用 42 3.7 小结 46 第4章 Servlet技术 47 4.1 Servlet简介 47 4.1.1 Servlet的特点 47 4.1.2 Servlet的优势 48 4.1.3 Servlet的工作过程 49 4.1.4 Servlet的生命...

Global site tag (gtag.js) - Google Analytics