`
newchq
  • 浏览: 54999 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Spring整理10 -- 动态代理

阅读更多

问题:我们有一个实现类,分别有添加、删除、更新、查询等方法,如果我们现在要在执行方法加一个验证权限的方法,我们该如何做呢?有人会这还不简单,新建一个方法,在每个方法前调用一个就行。这种是可以完成功能,但它不够灵活,也破坏了我们的原有的代码。那该如何做才能更灵活呢?我们现在用jdk提供的动态代理模式来实现。

首先,我们新建一个接口UserManager

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

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()------");

    }

}

 
 

其次,写一个代理类SecurityHandler,生成我们实现类的代理类,我们将在这个加上验证权限的方法。

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()------------");

    }   

}

 
 

最后,我们写一个测试类来进行测试一下。

public class Client {

    public static void main(String[] args) {

       SecurityHandler handler = new SecurityHandler();

       UserManager userManager = 

(UserManager)handler.newProxy(new UserManagerImpl());

       userManager.deleteUser(1);

    }

}

 

分享到:
评论

相关推荐

    spring-reference---cn

    Spring框架通过AOP代理实现了这一功能,使得开发者可以在不修改业务逻辑代码的情况下添加新的行为。 - **通知类型**: - **前置通知**:在方法执行前调用。 - **后置通知**:在方法执行后调用,无论是否抛出异常...

    Springcloud-面试自整理

    Zuul 是一个边缘服务应用,为微服务架构集群提供代理、过滤、路由等功能。 6. **Feign**:声明式HTTP客户端。Feign 是一个声明式的 HTTP 客户端,使得编写 Web 服务客户端更加容易。 #### 构建Spring Cloud项目的...

    java-用Java动态代理实现AOP.pdf

    7. Spring AOP:尽管文档主要是围绕JDK动态代理展开的,但文档还提及了Spring AOP框架,这是一个更为高级和流行的AOP实现。Spring AOP同样基于代理模式,但支持在方法调用前后加入额外的行为(advice),且能够与...

    传智播客Spring2.5.6学习笔记最新整理

    - `lib/cglib/cglib-nodep-2.1_3.jar`,提供动态代理实现。 - 当项目中涉及到JSR-250标准注解(如@Resource, @PostConstruct, @PreDestroy)时,必须包含: - `lib\j2ee\common-annotations.jar` 确保将上述所有...

    spring整理好的jar包.zip

    这个名为“spring整理好的jar包.zip”的压缩文件包含了Spring框架中几个关键领域的核心组件,旨在简化开发过程并提升效率。让我们逐一深入理解这些组件及其在实际应用中的作用。 首先,我们来看“ioc专用包”。IOC...

    Spring面试专题及答案整理.pdf

    4. **AOP(面向切面编程)**:通过代理模式实现了切面编程,帮助开发者实现诸如日志记录、安全控制等功能。 5. **工具**:提供了各种工具类,如用于文件上传的CommonsMultipartResolver。 6. **消息**:支持多种...

    simple-spring-memcached统一缓存的使用实例[整理].pdf

    《Simple-Spring-Memcached统一缓存的使用详解》 在Java应用中,尤其是在中大型项目中,有效地管理和使用缓存对于提升系统性能至关重要。Simple-Spring-Memcached(SSM)是一个流行的缓存框架,它整合了Spring框架...

    java面试题_框架—Spring(14题)

    - Spring支持两种类型的AOP:基于代理的(包括JDK动态代理和CGLIB代理)和基于AspectJ的AOP。 5. **Spring MVC** - Spring MVC是Spring框架的一个模块,用于构建Web应用程序。 - 它采用Model-View-Controller...

    spring.net 资料整理

    AOP 在 Spring.NET 中主要通过代理模式实现,可以用于事务管理、日志记录、性能度量等场景。 总之,Spring.NET 是一个强大的 .NET 开发框架,通过 IoC 和 AOP 提供了灵活的应用程序结构和模块化设计,使开发者能够...

    Spring面试专题及答案整理文档.zip

    这个“Spring面试专题及答案整理文档”包含了Spring框架的重要知识点,是准备Spring面试和深入理解Spring技术体系的良好资料。 1. **依赖注入(DI)** - DI是Spring的核心,它允许开发者在运行时通过XML配置或注解...

    spring-framework4.2x源码

    - **AOP代理**:Spring支持JDK动态代理和CGLIB代理,通过ProxyFactoryBean和Advised接口实现,源码中可深入了解这些技术。 在分析源码的过程中,不仅需要理解代码逻辑,还要结合设计模式,如工厂模式、装饰器模式、...

    JAVA架构师核心面试知识整理新-加密.pdf

    - **动态SQL**:如何利用MyBatis的动态SQL来编写灵活的查询语句。 - **缓存机制**:一级缓存和二级缓存的理解和使用场景。 - **Mapper接口与XML配置**:接口映射和XML配置文件的结合使用。 5. **Dubbo面试**: ...

    Spring知识整理

    ### Spring知识整理 #### 一、Spring框架简介与环境搭建 **Spring** 是一款轻量级的 Java 开发框架,其核心设计目标是为了使企业应用更容易配置和部署,同时简化了开发过程。Spring 可以集成几乎所有的 J2EE 流行...

    SpringCloud学习笔记整理最新版本

    在学习Spring Cloud的过程中,可以按照以下几个方面进行系统性的整理和笔记记录: 1. **基础概念和架构**: - 了解微服务架构的基本概念和Spring Cloud的核心组件,如Eureka、Ribbon、Feign、Hystrix、Zuul、...

    java-java面试题库整理-基础-JVM-线程并发-框架等.zip

    这份"java-java面试题库整理-基础-JVM-线程并发-框架等.zip"文件提供了一个全面的复习资源,帮助求职者准备Java相关的面试。 1. **Java基础知识** - 类与对象:Java是一种面向对象的语言,了解类的定义、构造器、...

    Spring源码解析.zip

    在Spring中,AOP主要通过代理模式实现,分为JDK动态代理和CGLIB代理两种。`org.springframework.aop`和`org.springframework.aop.framework`包下的类,如`Advised`、`Advisor`、`Pointcut`和`ProxyFactoryBean`,...

    spring-core.pdf 源码电子书

    本源码电子书聚焦于Spring Core的源码解析,它是由Spring Core源码整理而来的,内容上呈现了Spring核心模块源码的细节和工作机制。通过阅读源码,开发者可以更深入地理解Spring框架的设计思想和实现细节,从而在实际...

    SpringBlade开发手册基础版.pdf

    SpringBlade致力于创造新颖的开发模式,整理归纳开发中遇到的痛点和生产中的坑,并将解决方案融合到框架中。Sword是SpringBlade前端UI框架,主要技术选型为React、Ant Design、Umi、Dva。Saber核心框架项目地址,...

    spring知识点总结

    “知识点总结.xls”可能是一个整理好的Spring框架关键知识点的表格,可能包含了Spring的主要模块(如Core Container、Data Access/Integration、Web、AOP、Test等)、关键概念(如Bean、ApplicationContext、IoC容器...

    最新整理的spring、springMVC、mybatis面试题及答案

    Spring AOP 中的动态代理主要有两种方式:JDK 动态代理和 CGLIB 动态代理。JDK 动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口。JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类,在...

Global site tag (gtag.js) - Google Analytics