/**
* UserService接口
*/
interface UserService{
void login();
void logout();
}
/**
* UseService实现类
*/
class UserServiceImpl implements UserService{
@Override
public void login() {
System.out.println("someone login....");
}
@Override
public void logout() {
System.out.println("someone logout....");
}
}
/**
* 实现InvocationHandle接口,用于织入所要增强的代码
*/
class UserServiceHandle implements InvocationHandler{
private UserService userService;
public UserServiceHandle(UserService userService) {
this.userService = userService;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
LogService.info();
Object object = method.invoke(userService, args);
LogService.info();
return object;
}
}
/**
* 代理类工厂,用于产生UseService类的代理类
*/
class ProxyFactory{
public static UserService getProxyObject(UserService userService){
// 使用JDK动态代理技术来创建对应的代理类
return (UserService) Proxy.newProxyInstance(
userService.getClass().getClassLoader(),
userService.getClass().getInterfaces(),
new UserServiceHandle(userService)
);
}
}
/**
* 基于CGLib的动态代理技术
* 注意这里需要实现MethodInterceptor接口
*/
class ProxyFactory implements MethodInterceptor{
// 提供对应的增强操作类
private Enhancer enhancer = new Enhancer();
public UserService getProxyObject(Class clazz){
// 设置所要增强的类的父类
enhancer.setSuperclass(clazz);
// 设置回调对象
enhancer.setCallback(this);
// 创建对应的对象
return (UserService) enhancer.create();
}
// 实现拦截方法,用于拦截对应的方法,并且对对应的方法进行增强
// 参数含义:传入的对象, Method对象,方法的参数,进行代理后的Method对象
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
LogService.info();
// 这里需要注意,由于methodProxy对象是增强后的Method对象,所以这里需要调用的
// 是methodProxy父类的方法,也就是所以增强的类的方法,以实现原来的功能
Object object = methodProxy.invokeSuper(o, objects);
LogService.info();
return object;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有