spring练习中出现:
Exception in thread "main" java.lang.ClassCastException: $Proxy0
at test.spring.test.MainTest.main(MainTest.java:12)
解决方法就是用接口来接受获得的bean
package test.spring.test;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import test.spring.service.UserService;
import test.spring.service.impl.UserServiceImpl;
public class MainTest {
public static void main(String[] args) throws Exception {
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
UserService userService = (UserService)factory.getBean("service");
userService.createUser("roundzheng", "123");
userService.createUser("dsfds", "fdsfsd");
userService.getPassword("roundzheng");
if(userService.readUser("roundzheng")) {
userService.deleteUser("roundzheng");
}
System.out.println("roundzheng's password is \"" + userService.getPassword("roundzheng") + "\""+userService.readUser("roundzheng"));
factory.destroySingletons();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="serviceTarget" class="test.spring.service.impl.UserServiceImpl" />
<bean id="logAdvisor" class="test.spring.service.aop.LogAdvisor" />
<bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>test.spring.service.UserService</value></property>
<property name="target"><ref local="serviceTarget"/></property>
<property name="interceptorNames">
<list>
<value>logAdvisor</value>
</list>
</property>
</bean>
</beans>
分享到:
相关推荐
10.3.6 关于java.lang.ClassCastException: $Proxy0错误的解决方法 216 10.4 开发 Spring 2.0 AOP 应用 219 10.4.1 使用aop 标签实现AOP 219 10.4.2 使用标注(@AspectJ)实现AOP 221 10.4.3 开发环绕通知(Around ...
Java标准库提供了两种类型的代理:静态代理(通过接口实现)和动态代理(通过`java.lang.reflect.Proxy`类实现)。 3. 泛型(Generics): 泛型引入于Java 5,增强了代码的类型安全性和可读性。它们允许我们在类、...
- 使用 `java.lang.reflect.Proxy` 类和 `java.lang.reflect.InvocationHandler` 接口创建动态代理对象。 #### 示例代码 ```java public interface MyInterface { void myMethod(); } public class ...
- **JDK动态代理**:使用`java.lang.reflect.Proxy`类和`InvocationHandler`接口实现。适用于接口的代理。 - **CGLIB动态代理**:使用第三方库CGLIB,适用于没有接口的类。 动态代理通常用于AOP(面向切面编程)...
静态代理是手动创建代理类,而动态代理则由JDK提供,通过`java.lang.reflect.Proxy`类和`InvocationHandler`接口实现。 1. `InvocationHandler`接口与`invoke`方法: `InvocationHandler`接口只有一个`invoke`方法...
8. **动态代理(Dynamic Proxies)**:通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口,可以创建动态代理类,实现接口并在运行时决定其行为。 9. **脚本引擎(Scripting Engines)**:...
5. **动态代理(Dynamic Proxy)**:Java提供了CGLIB和Java.lang.reflect.Proxy来创建动态代理,可以用来实现AOP(面向切面编程),如日志、事务管理等功能。 6. **枚举注解(Enum Annotation)**:Java允许在枚举...
反射主要涉及`java.lang.Class`类和`java.lang.reflect`包中的相关类,如`Constructor`、`Method`和`Field`。 **泛型** 是从Java 5开始引入的一个特性,它为代码提供了类型安全的机制。泛型允许我们在定义类、接口...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或...