Spring AOP 自动代理类BeanNameAutoProxyCreator的配置如下:
<bean id="autoHibernateInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionAttributes">[align=left][/align]
[/size]
<props>
<prop key="save*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
<property name="transactionManager">
<ref local="hibernateTransactionManager"/>
</property>
</bean>
<bean id="hibernateTransactionProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Dao</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>autoInterceptor</value>
<value>autoHibernateInterceptor</value>
</list>
</property>
</bean>
要注意的是:BeanNameAutoProxyCreator的 beanNames要写我们在配置文件中已经定义好的
Bean,如
<list>
<value>*Dao</value>
</list>
如果写成如下的形式,这不会自动创建事务代理。
<list>
<value>com.asc.test.dao.*Impl</value>
</list>
我们是想为DAO。IMPL包下的所有类创建代理,但是这样写的话不行,
你可以通过事务属性设置来测试有没有产生代理。写成包的形式,我把事务属性都设置成
PROPAGATION_REQUIRED,readOnly 到样还是增删。
改成已经定义好的Bean的话,你删除增加都会出不能写的异常的。
Hibernate 是样的,Jdbc不行,还不知道是怎么回是,我把事务属性也都设置成PROPAGATION_REQUIRED,readOnly ,还是能增删。希望那位高手看到了指点迷津。
[size=large]
续篇:呵呵
上面写的我今天测过了,JDBC也一样行的,也不知道是不是昨天测错了,还是没有到位,
Hibernate那样的自动代理配置同样适合JDBC。可能是我还没真正理解代理,呵呵,
现在明白,代理就是在方法的前后添加我们自己的语句,既然可以是Hibernate事务,那也可以是JDBC的事务吧。呵呵
分享到:
相关推荐
5. **代理的使用**:在应用中,我们通常不直接引用目标对象,而是通过ApplicationContext获取Bean,此时Spring会自动创建并返回相应的代理对象。这样,当我们调用代理对象的方法时,就会触发AOP代理逻辑。 6. **切...
然而,如果需要更精细的控制,可以通过`@EnableAspectJAutoProxy`注解开启基于AspectJ的自动代理支持,或者通过`proxyTargetClass`属性来强制使用CGLIB代理。 总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态...
在 Spring AOP 的自动代理创建过程中,`AbstractAutoProxyCreator` 类起着关键作用。它实现了 `BeanPostProcessor` 接口,会在 Bean 初始化后对其进行处理,生成代理对象。`AbstractAutoProxyCreator` 会查找 Spring...
动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...
此外,还可以使用注解驱动的配置,通过`@EnableAspectJAutoProxy`注解启用,使得Spring自动扫描并处理切面。 对于测试,`JUnit4`是广泛使用的单元测试框架。在Spring AOP的例子中,我们可能会创建一个`@RunWith...
Spring默认使用JDK动态代理,但如果目标对象没有实现接口,它会自动切换到CGLIB。 Spring AOP的主要概念包括: 1. 切点(Pointcut):定义切入点表达式,指定哪些方法将被拦截。 2. 通知(Advice):在切点匹配时...
在压缩包`spring3_day02_aop`中,可能包含了Spring AOP的示例代码,包括切面类、配置文件以及运行示例,你可以通过学习这些代码加深对Spring AOP自动代理的理解。通过实际操作,你会发现Spring AOP使得编写和管理切...
总之,Spring AOP通过代理技术实现了面向切面编程,使得开发者能够更专注于业务逻辑,而将通用的横切关注点剥离出来,提高了代码的可读性和可维护性。通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大...
- **自动代理生成**:Spring容器可以在启动时自动识别并生成代理对象,无需手动创建。 - **事务管理**:Spring AOP的一个常见应用就是声明式事务管理,通过`@Transactional`注解可以轻松地在方法级别控制事务。 综...
- **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...
通过这个代理对象调用方法,Spring会自动插入预先定义好的通知逻辑。 总的来说,JDK动态代理是Spring AOP实现的基础,它允许我们在运行时动态创建代理对象,实现对方法调用的拦截和增强。Spring AOP则在此基础上...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以使用JDK动态代理或CGLIB动态代理来创建代理对象。 在实际应用中,...
5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...
本篇文章将深入探讨Spring AOP中的动态代理、责任链模式以及注解的使用。 首先,动态代理是实现AOP的关键技术之一。在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类...
6. **使用代理对象**:Spring会自动创建并返回代理对象,当通过代理对象调用方法时,Spring会根据配置的切面和通知执行相应的逻辑。 在实际开发中,结合Maven构建工具,我们可以轻松地将Spring AOP集成到项目中。...
- 自动代理:Spring会根据配置自动生成代理对象,透明地处理切面逻辑。 7. **最佳实践**: - 尽量减少切面的粒度,避免过多的切面导致系统复杂性增加。 - 切面应该具有高度的重用性和独立性,避免与具体业务逻辑...
4. 使用注解驱动的AOP配置,以及如何在Spring配置文件中启用AOP自动代理。 5. 引入的概念和使用,以及如何通过引入增加类的方法或属性。 6. 实践示例,可能包括事务管理、日志记录等实际应用场景的AOP实现。 通过这...
4. 如果需要使用AspectJ的高级特性,例如类型安全的切点匹配,可以在Spring配置中引入AspectJ的自动代理: ```xml <aop:aspectj-autoproxy/> ``` 总之,aopalliance-1.0.jar和aspectjweaver-1.8.9.jar是Spring ...
Spring AOP在默认情况下使用JDK动态代理,但当目标类没有接口时,会自动切换到CGLib。通过动态代理,Spring可以在运行时创建代理对象,根据配置织入相应的切面逻辑,无需程序员手动创建和维护代理类。 总的来说,...