碰到这样的错误提示信息一般是spring中AOP代理配置出现问题,在spring中代理的配置基本上有这么两种一种是基于JDK,而另外一种是CGLIB的代理。
碰到这样的错误提示信息一般是spring中AOP代理配置出现问题,在spring中代理的配置基本上有这么两种一种是基于JDK,而另外一种是CGLIB的代理。
基于JDK的代理是面向接口的,所有使用 Proxy 的对象都必须定义一个接口,而且用这些对象的代码也必须是对接口编程的,Proxy 生成的对象是接口一致的而不是对象一致的。Proxy 毕竟是通过反射实现的,必须在效率上付出代价:有实验数据表明,调用反射比一般的函数开销至少要大 10 倍。而且,从程序实现上可以看出,对 proxy class 的所有方法调用都要通过使用反射的 invoke 方法。因此,对于性能关键的应用,使用 proxy class 是需要精心考虑的,以避免反射成为整个应用的瓶颈。
CGLib代理同jdk代理采用不同的方式,它是采用修改java类文件而得到的。利用了CGLIB调用ASM库,ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。
新建一个公共类:
public class UserManager extends HibernateDaoSupport {
private Hashtable<NetUserinfo, Long> userDao = new Hashtable<NetUserinfo, Long>();
private Hashtable<NetRoleinfo, Long> roleDao = new Hashtable<NetRoleinfo, Long>();
public UserManager() {
}
public void saveUser() {
HibernateTemplate ht = this.getHibernateTemplate();
List<NetUserinfo> lst = this.getHibernateTemplate().find(
"from NetUserinfo");
for (NetUserinfo userinfo : lst) {
System.out.println(userinfo.getUserName());
}
}
}
第一种采用JDK代理:
applicationContext.xml
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<bean id="userManager" class="sx.cj.security.service.UserManager"
scope="prototype">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
测试:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-common.xml",
"applicationContext-beans.xml" });
IUserManager userManager = (IUserManager) appContext
.getBean("userManager");
userManager.saveUser();
在测试文件中必须采用接口的方式,才能获得BEAN对象。
第二种:采用CGLIB代理
applicationContext.xml
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"></ref>
</property>
<property name="target">
<bean class="sx.cj.security.service.UserManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="proxyTargetClass">
<value>true</value>
</property>
</bean>
测试文件
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-common.xml",
"applicationContext-beans.xml" });
UserManager userManager = (UserManager) appContext
.getBean("userManager");
userManager.saveUser();
分享到:
相关推荐
Java 异常解决方案 Java 异常是 Java 开发中经常遇到的问题,本文档将提供 Java 异常解决方案,涵盖 Hibernate、Tomcat、Java 基本、JSP、SSH 整合等多个方面的异常解决方案。 一、Hibernate 异常解决方案 * org....
本文将深入探讨这些问题及其解决方案。 首先,我们要明白混淆的主要目的是为了减小应用的大小并增加反编译的难度。它会重命名类、方法和变量,这可能导致Gson在反序列化时找不到正确的映射。以下是一些可能出现的...
《Java开发常见错误及解决方案文件》是一份指导Java开发者避免和处理开发过程中常见问题的文档。该文档中提到了一些典型的错误和对应的解决方案,下面详细展开其中的一些关键知识点。 1. 类定义未找到错误(java....
通过分析这个示例,你可以进一步理解问题所在并找到解决方案。如果博客链接有效,可以查看博主的分析和讨论,可能会对解决你的问题有所帮助。同时,查阅json-lib的官方文档和相关的开发者社区讨论也是解决这类问题的...
### WebLogic 下 Oracle CLOB 类型转换解决方案 在使用 WebLogic 服务器进行应用程序开发时,尤其是在处理 Oracle 数据库中的 CLOB 类型数据时,开发者可能会遇到类型转换的问题。本文将详细介绍如何通过反射机制来...
- **解决方案**: - 确保访问控制符(public, protected, private)的正确使用。 - 在适当情况下,可以考虑使用友元类(friend class)或接口(interface)来扩展访问权限。 ### 扩展知识点 #### 七、其他常见异常 - ...
**解决方案**: 1. **清理 CLASSPATH**: 清理项目 CLASSPATH,确保只包含最新版本的 `mail.jar` 和 `activation.jar`。 2. **版本一致性**: 使用相同的 JavaMail 和 Activation 框架版本。 #### 三、Java.lang....
通过上述的分析和解决方案的介绍,我们可以看到在使用SpringBoot的devtools工具时,需要考虑到类加载器的使用问题,特别是在多模块项目或者特定的框架搭配使用时,这可能导致一些意外的异常。通过添加META-INF/...
通过参考中文或英文的API文档,开发者可以在遇到问题时迅速找到解决方案,或者在设计新功能时了解已有的工具和方法。在实际开发中,结合具体的案例和实践,不断学习和探索API的使用,将有助于提升编程技能。
`java.lang.ClassCastException`** - **异常描述**:运行时尝试将对象转换为不兼容的类型。 - **原因分析**:强制类型转换时发生类型不匹配的情况。 - **解决方案**: - 确保类型转换正确无误。 - 使用`...
**解决方案**: - 在调用方法前检查对象引用是否为`null`。 - 使用Java 8及更高版本中的Optional类来避免空指针异常。 #### 2. `java.lang.ClassNotFoundException` **描述**:当Java虚拟机(JVM)或者ClassLoader...
通过上述分析与解决方案,我们可以有效地定位并解决Tomcat7启动或运行时出现的`java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl`错误。这些步骤不仅适用于特定的错误场景,对于处理类似的类加载...
`java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory` 问题分析 该错误的根本原因是Axis2使用了StAX API,导致与Weblogic Server 10.3的XML Input Factory冲突。在Weblogic Server 10.3.4中,这个...
java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory 如果出现这个错误,可能是由于存在版本冲突,即项目中引入了不兼容的wstx-asl库。此时,应该删除工程中引入的`wstx-asl-3.2.9.jar`,以避免与...
异常信息:“java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date” 这表示尝试将`java.util.Date`类型的对象强制转换为`java.sql.Date`类型,但由于类型不兼容导致异常。解决方案是: ...
解决方案是在保存父实体之前先保存所有相关的子实体。 ### 8. javax.persistence.PersistenceException: Unable to configure EntityManagerFactory 此异常表明在配置`EntityManagerFactory`时遇到了问题,可能是...
- **解决方案**:为了克服这些问题,JBoss 3.x版本实现了全新的类装载架构,该架构允许类跨部署单元使用,从而极大地增强了服务的交互性和热部署能力。 #### 2.2.2 类装载和Java中的类型 **类装载基础** - **类...
例如,当出现`java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor`异常时,解决方案是在Tomcat的conf/context.xml文件中添加`<Loader delegate="true"/>`。如果遇到`Cannot open ...