SecurityHandler.java
package com.bjsxt.spring;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SecurityHandler implements InvocationHandler {
private Object targetObject;
public Object newProxy(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
checkSecurity();
Object ret = null;
try {
ret = method.invoke(this.targetObject, args);
}catch(Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException(e);
}
return ret;
}
private void checkSecurity() {
System.out.println("----------checkSecurity()---------------");
}
}
Client.java
package com.bjsxt.spring;
public class Client {
public static void main(String[] args) {
//UserManager userManager = new UserManagerImpl();
SecurityHandler handler = new SecurityHandler();
UserManager userManager = (UserManager)handler.newProxy(new UserManagerImpl());
//userManager.addUser("张三", "123");
userManager.deleteUser(1);
}
}
UserManager.java
package com.bjsxt.spring;
public interface UserManager {
public void addUser(String username, String password);
public void deleteUser(int id);
public void modifyUser(int id, String username, String password);
public String findUserById(int id);
}
UserManagerImpl.java
package com.bjsxt.spring;
public class UserManagerImpl implements UserManager {
public void addUser(String username, String password) {
System.out.println("-------UserManagerImpl.addUser()----------");
}
public void deleteUser(int id) {
System.out.println("-------UserManagerImpl.deleteUser()----------");
}
public String findUserById(int id) {
System.out.println("-------UserManagerImpl.findUserById()----------");
return null;
}
public void modifyUser(int id, String username, String password) {
System.out.println("-------UserManagerImpl.modifyUser()----------");
}
// private void checkSecurity() {
// System.out.println("----------checkSecurity()---------------");
// }
}
分享到:
相关推荐
package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...
在Spring Dynamic Proxy模块中,`org.springframework.aop.framework.ProxyFactoryBean`和`org.springframework.aop.framework.ProxyFactory`是创建代理对象的主要工具。它们可以根据配置的拦截器链来创建代理,并且...
标题"dt.zip_spring_www.dynamic-proxy.c"暗示了这个压缩包包含的是关于Spring框架动态代理的示例代码。"www.dynamic-proxy.c"可能是指一个特定的类或概念,但在这里,我们主要关注Spring框架的动态代理部分。 首先...
- **动态代理**:`spring_dynamic_proxy`则展示了JDK动态代理和CGLIB动态代理。JDK动态代理基于接口生成代理类,而CGLIB是通过继承目标类来实现的,适用于不依赖接口的场景。 3. **与Hibernate集成**:`spring_...
6. **spring_dynamic_proxy**、**spring_static_proxy**:这部分可能涉及到Spring的两种代理模式,即JDK动态代理和CGLIB静态代理,它们在实现AOP时起着重要作用。 7. **spring_autowrire_byName**:这部分是关于...
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
【文件名称】"test_spring_dynamic_proxy"可能是一个测试用例,用于演示Spring动态代理的实际应用。这个测试可能会包含以下几个部分: 1. 创建一个被代理的目标对象,例如一个简单的业务服务类。 2. 定义一个通知类...
Spring的JdkDynamicProxy和Cglib就是静态代理的实现方式。 2. **动态代理(spring_AOP_2_dynamic)**:相比静态代理,动态代理在运行时生成代理,更加灵活。Spring的AspectJ库就提供了动态代理功能,可以在不修改...
例如,`Spring_dynamic_proxy`可能指的是Spring框架中的动态代理机制,这是实现AOP(面向切面编程)的核心。它允许我们在运行时为对象创建代理,拦截方法调用并添加额外的行为。 2. **开发工具**: - `EditPlus_v...
这里我们将深入探讨这两种模式,并结合提供的文件名,即“005_Factory_Series_DesignPattern”和“006_Dynamic_Proxy_Spring_AOP”,来分析它们的实现和应用。 首先,我们来看一下工厂方法设计模式。工厂方法是创建...
这时,Spring 使用 JdkDynamicProxy 来创建代理,因为 JdkDynamicProxy 只能代理实现了接口的类。`myProxyForInterface` Bean 使用 `ProxyFactoryBean` 创建代理,指定了要代理的接口、使用的拦截器以及目标 Bean。 ...
在这个“dynamic-proxy-demo.zip”压缩包中,我们可能找到了关于这两种代理模式的示例代码。 首先,让我们来深入理解动态代理和静态代理的概念。 **静态代理:** 静态代理是最基础的形式,它通过创建目标对象的...
在`JDKDynamicProxy`类中,实现了`InvocationHandler`接口,并持有一个`HelloAop`对象。当调用代理对象的方法时,实际调用的是`InvocationHandler`的`invoke`方法。`invoke`方法可以控制在调用目标方法前后的行为,...
**Java动态代理(Dynamic Proxy)** Java动态代理是Java提供的一种机制,可以在运行时创建具有特定接口的代理类。这通常用于实现AOP(面向切面编程)或事件处理等。主要由java.lang.reflect.Proxy和java.lang....
MyService dynamicProxy = (MyService) Proxy.newProxyInstance( MyService.class.getClassLoader(), new Class[]{MyService.class}, handler); dynamicProxy.doSomething(); ``` 在这个动态代理示例中,...
在这个例子中,`DynamicProxy`实现了`InvocationHandler`接口,并在`invoke`方法中添加了前置和后置通知。`Proxy.newProxyInstance()`方法用于创建代理对象,传入目标对象的类加载器、目标对象实现的接口列表以及...
“tiny-spring-step-7-method-interceptor-by-jdk-dynamic-proxy.zip”开始涉及AOP概念,通过JDK动态代理实现了方法拦截器,这使得我们可以在不修改原有代码的情况下,对方法进行增强,例如添加日志、事务控制等。...
import static java.lang.reflect.Proxy.newProxyInstance; import static org.apache.ibatis.reflection.ExceptionUtil.unwrapThrowable; import static org.mybatis.spring.SqlSessionUtils.closeSqlSession; ...
CGLIB 用来生成动态代理类(dynamic proxy classes),供核心 DI 和 AOP 实现之用。由于大量 Spring 功能的实现都要用到 CGLIB,因此你的应用几乎总需包含 CGLIB。 coscos.jar COS 代表 com.oreilly.servlet,是个...
在`006_Dynamic_Proxy_Spring_AOP`这个压缩包中,可能包含了关于动态代理和Spring AOP的示例源代码。通过分析这些代码,你可以深入理解动态代理的实现细节,以及Spring如何在内部使用它来实现AOP功能。你可以查看...