- 浏览: 6352260 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
DefaultAdvisorAutoProxyCreator
这种配置方式与BeanNameAutoProxyCreator自动创建代理的方式非常相似,都是使用bean后处理器为目标bean创建代理,区别是前者使用事务拦截器创建代理
,后者需要使用Advisor创建事务代理
。
事实上,采用DefaultAdvisorAutoProxyCreator的事务代理配置方式更加简洁,这个代理生成器自动搜索Spring容器中的Advisor,并为容器中所有的bean创建代理。
DefaultAdvisorAutoProxyCreator:
下面是使用DefaultAdvisorAutoProxyCreator的配置方式
对于事务,使用TransactionAttributeSourceAdvisor这个Advisor:
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <!-- 配置事务拦截器--> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器bean需要依赖注入一个事务管理器 --> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <!-- 下面定义事务传播属性--> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 定义事务Advisor--> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"<!-- 定义advisor时,必须传入Interceptor--> <property name="transactionInterceptor" ref="transactionInterceptor"/> </bean> <!-- DefaultAdvisorAutoProxyCreator搜索容器中的 advisor,并为每个bean创建代理 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
在这种配置方式下,配置文件变得更加简洁,增加目标bean,不需要增加任何额外的代码,容器自动为目标bean生成代理。但这种方式的可读性相对较差。
来源:http://mopdzz.itpub.net/post/20166/470140
当ApplicationContext读如所有的Bean配置信息后,DefaultAdvisorAutoProxyCreator将扫描上下文,寻找所有的Advistor(一个Advisor是一个切入点和一个通知的组成) ,将这些Advisor应用到所有符合切入点的Bean中。
此例子没有用到事务,只用到AOP
//前置通知 public class WelcomeAdvice implements MethodBeforeAdvice ...{ public void before(Method method, Object[] args, Object obj) throws Throwable ...{ System.out.println("Hello welcome to bye "); } }
<!-- 自动代理所有的advisor --> <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean> <bean id="WelcomeAdvice" class="AutoProxyTwo.WelcomeAdvice"/> <bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="pattern"> <value>.*sell.+</value> <!-- 业务实现方法名匹配 --> </property> <property name="advice"> <ref bean="WelcomeAdvice"/> </property> </bean>
雷同:http://www.iteye.com/topic/128556
http://esffor.iteye.com/blog/96126
很值得看的例子(没有用到事务,单纯AOP)
http://www.blogjava.net/cmzy/archive/2008/08/17/222624.html
BeanNameAutoProxyCreator:
<!-- 配置事务拦截器--> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器bean需要依赖注入一个事务管理器 --> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <!-- 下面定义事务传播属性--> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> //定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性 <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <!-- 下面是所有需要自动创建事务代理的bean--> <list> <value>userDAOTarget</value> </list> </property> <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> <!-- 此处可增加其他新的Interceptor --> </list> </property> </bean> <!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动生成事务代理--> <bean id="userDAOTarget" class="db.CustomersDAO"> <property name="sessionFactory"> <ref local="localSessionFactory" /> </property> </bean>
单纯使用AOP时,interceptorNames为通知advice:
<beans> <bean id="TestBeanA" class="aop.test.TestBeanA"/> <bean id="BeanB" class="aop.test.BeanB"/> <bean id="BeforeAdvice" class="aop.test.BeforeAdvice"></bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>Test*</value> </list> </property> <property name="interceptorNames"> <list> <value>BeforeAdvice</value> </list> </property> </bean> </beans>
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch07s09.html
http://mopdzz.itpub.net/post/20166/470137
http://hi.baidu.com/freshman0502/blog/item/8068e01b5038d01c8618bf8e.html
发表评论
-
Spring 配置多数据源实现数据库读写分离
2014-10-09 11:05 58220现在大型的电子商务 ... -
strust_spring_hibernate的优缺点
2014-10-08 09:41 2754struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
声明式事务
2014-09-03 17:53 1775跟开涛学Spring 数据库事务 本 ... -
@Component注解
2014-08-20 15:43 37826Spring自带的@Component注 ... -
日志记录、性能监控的三种实现方式
2014-08-18 14:09 7627一、需解决的问题 部分API有签名参数(signatur ... -
BeanWrapper 设置和获取属性值
2014-08-18 11:10 96865.4. Bean处理和BeanWrapper - Spr ... -
SpringMVC的拦截器Interceptor
2014-08-15 10:23 5073跟开涛学SpringMVC 接口: Ha ... -
AOP
2014-08-14 17:00 10741跟开涛学Spring 问题: 使用BeanFac ... -
Bean作用域
2014-08-14 15:16 1797跟开涛学Spring 附:单例模式的DoubleChec ... -
DI
2014-08-14 10:26 1787跟开涛学Spring DI: ... -
IOC + 容器
2014-08-13 18:03 2910跟开涛学Spring 传统应用程序示意图 ... -
Spring中Bean初始化实例【重要】
2014-07-21 16:48 61236可参考文章: Spring Bean 生命周期 Spr ... -
bean的生命周期
2014-07-21 15:41 1522在spring中,从BeanFactory或Applica ... -
Spring中BeanPostProcessor
2014-07-21 15:19 50686Spring提供了很多扩展 ... -
context,listener,filter,servlet加载顺序
2014-04-22 14:08 8071web.xml加载过程(步骤):1.启动WEB项目的时候, ... -
Spring+hibernate的session问题
2013-09-27 10:20 3188在spring框架和hibernate框架集成的时候,根据 ... -
HttpServletRequestWrapper 用法
2013-09-25 16:50 8495HttpServletRequestWrapper ... -
AOP
2012-05-09 10:14 1621引子: AOP(面向方面 ... -
IOC
2012-05-09 10:11 1593引述:IoC(控制反转:I ... -
事务隔离级别
2012-03-08 11:39 10502模拟数据库的四种隔离级别1 模拟数据库的四种隔离级 ...
相关推荐
然而,如果需要更精细的控制,可以通过`@EnableAspectJAutoProxy`注解开启基于AspectJ的自动代理支持,或者通过`proxyTargetClass`属性来强制使用CGLIB代理。 总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态...
在 Spring AOP 的自动代理创建过程中,`AbstractAutoProxyCreator` 类起着关键作用。它实现了 `BeanPostProcessor` 接口,会在 Bean 初始化后对其进行处理,生成代理对象。`AbstractAutoProxyCreator` 会查找 Spring...
5. **代理的使用**:在应用中,我们通常不直接引用目标对象,而是通过ApplicationContext获取Bean,此时Spring会自动创建并返回相应的代理对象。这样,当我们调用代理对象的方法时,就会触发AOP代理逻辑。 6. **切...
6. **配置自动代理**:在某些情况下,可能需要自定义代理创建或禁用某些特性。可以通过`@EnableAspectJAutoProxy`注解在配置类中启用AspectJ支持,并调整其属性。 7. **调试与测试**:确保在测试中正确配置了AOP,...
Spring 2.5 AOP(面向切面编程)是Java应用程序中的一个重要概念,它允许开发者在不修改原有代码的情况下插入新的行为或监控。这个例子旨在帮助我们理解和应用Spring框架的AOP特性。以下是对该主题的详细解释: 一...
当我们声明一个Bean为切面并配置通知时,Spring容器会在需要的时候自动创建AOP代理。当通过代理调用目标方法时,Spring会先执行通知,然后转发到实际的目标方法。这个过程称为拦截器链,每个通知相当于一个拦截器,...
本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...
在spring-aop.jar中,`org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator`类负责自动创建代理并织入切面。 三、Spring AOP的使用 在实际应用中,我们可以利用Spring AOP进行日志记录、...
综上所述,通过理解Spring AOP的配置和动态代理机制,我们可以灵活地在项目中添加横切关注点,提升代码的模块化和可维护性。在实际开发中,结合使用XML配置、注解配置以及适当的动态代理策略,可以使AOP功能更好地...
`spring-aop.xsd`文件是Spring AOP配置的XML Schema定义文件,用于指导和验证XML配置中的元素和属性,确保其符合规范,同时也为IDE提供代码提示和自动补全功能,提高开发效率。 在Java开发中,AOP(Aspect Oriented...
本篇将深入探讨如何在Spring中半自动地实现AOP代理。 首先,理解AOP的概念是至关重要的。AOP通过将关注点(如日志)与核心业务逻辑分离,提高了代码的可读性和可维护性。在Spring中,AOP代理有两种实现方式:JDK...
在Spring 2.5.6版本中,AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK动态代理基于接口实现,如果目标类实现了至少一个接口,Spring会使用JDK动态代理。如果目标类没有实现接口或者需要增强的类是final的,...
在Day01_AutoAOP的学习资料中,你可能将深入理解Spring AOP的原理,实践自动代理的配置,并通过示例代码体验如何使用AOP进行日志记录、事务管理和权限控制等功能。这将有助于提升你在JavaEE开发中的能力,使你的代码...
4. 使用AOP:在业务代码中,当匹配的连接点被触发时,对应的切面通知将会自动执行。无需显式调用。 通过上述步骤,`myAOPExample`展示了如何在Spring中定义、配置和应用AOP。这使得我们可以轻松地在不修改原有业务...
在实际应用中,我们可以通过Spring的`@Aspect`注解和`@Component`注解将切面类注册到Spring容器中,这样Spring会自动为我们创建代理对象。在运行时,当我们调用被代理的方法时,实际上是在调用代理对象的方法,从而...
5. **自动代理**:Spring可以自动检测应用中的`@Aspect`注解,并自动生成代理。这使得在无需显式配置的情况下启用AOP变得简单。 6. **源码分析**:对于深入理解Spring AOP,阅读其源码是非常有帮助的。你可以通过...
在压缩包`spring3_day02_aop`中,可能包含了Spring AOP的示例代码,包括切面类、配置文件以及运行示例,你可以通过学习这些代码加深对Spring AOP自动代理的理解。通过实际操作,你会发现Spring AOP使得编写和管理切...
1. **配置AOP**:在Spring配置文件中启用AOP代理。这可以通过设置`<aop:aspectj-autoproxy>`或`<aop:config>`元素来完成。例如: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...
5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以使用JDK动态代理或CGLIB动态代理来创建代理对象。 在实际应用中,...