`
守望者
  • 浏览: 54592 次
  • 来自: ...
社区版块
存档分类
最新评论

复习笔记:利用spring AOP管理权限[简单实例]

阅读更多

转载:http://lighter.iteye.com/blog/42673

复习笔记:利用spring AOP管理权限[简单实例]

这一排在复习spring的一些知识点,顺便写一下博客,下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:

代码
  1. public class User {   
  2.     private String username;   
  3.   
  4.     public String getUsername() {   
  5.         return username;   
  6.     }   
  7.     public void setUsername(String username) {   
  8.         this.username = username;   
  9.     }   
  10. }  

<script>render_code();</script>
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:

代码
  1. public interface TestCommunity {   
  2.   public void answerTopic();   
  3.   public void deleteTopic();   
  4. }  

<script>render_code();</script>

 

实现上面接口的TestCommunityImpl类:

代码
  1. public class TestCommunityImpl implements TestCommunity {   
  2.     //注册用户与管理员拥有的功能   
  3.     public void answerTopic() {   
  4.         System.out.println("可以发表,回复帖子");   
  5.     }   
  6.     //管理员拥有的功能   
  7.     public void deleteTopic() {   
  8.         System.out.println("可以删除帖子!");   
  9.     }   
  10. }  

<script>render_code();</script>

 

下一步,建立一下依赖注入的实现类TestResultImpl:

代码
  1. public class TestResultImpl {   
  2.     private TestCommunity test;   
  3.   
  4.     public void setTest(TestCommunity test) {   
  5.         this.test = test;   
  6.     }      
  7.      public void answerTopic()   
  8.      {   
  9.          test.answerTopic();   
  10.      }   
  11.       public void deleteTopic()   
  12.       {   
  13.           test.deleteTopic();   
  14.       }   
  15. }  

<script>render_code();</script>

 

接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:

代码
  1. import org.aopalliance.intercept.MethodInterceptor;   
  2. import org.aopalliance.intercept.MethodInvocation;   
  3.   
  4. //创建Around处理应该实现MethodInterceptor接口   
  5. public class TestAuthorityInterceptor implements MethodInterceptor {   
  6.     private User user;   
  7.   
  8.     public User getUser() {   
  9.         return user;   
  10.     }   
  11.     public void setUser(User user) {   
  12.         this.user = user;   
  13.     }   
  14.   
  15.     // invoke方法返回调用的结果   
  16.     public Object invoke(MethodInvocation invocation) throws Throwable {   
  17.         String methodName = invocation.getMethod().getName();   
  18.   
  19.         if (user.getUsername().equals("unRegistedUser")) {   
  20.             System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");   
  21.             return null;   
  22.         }   
  23.         if ((user.getUsername().equals("user"))   
  24.                 && (methodName.equals("deleteTopic"))) {   
  25.             System.out.println("你的身份是注册用户,没有权限删除帖子");   
  26.             return null;   
  27.         }   
  28.         // proceed()方法对连接点的整个拦截器链起作用,拦截器链中的每个拦截器都执行该方法,并返回它的返回值   
  29.         return invocation.proceed();   
  30.     }   
  31.   
  32. }   

<script>render_code();</script>

 

配置文件:

代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     <bean id="authTarget" class="org.test.lighter.TestCommunityImpl" />  
  5.   
  6.     <!-- 其中的username可以写为admin,user,和unRegistedUser -->  
  7.     <bean id="user" class="org.test.lighter.User">  
  8.         <property name="username" value="user" />  
  9.     </bean>  
  10.   
  11.     <!-- 配置拦截器 -->  
  12.     <bean id="TestAuthorityInterceptor"  
  13.         class="org.test.lighter.TestAuthorityInterceptor">  
  14.         <property name="user" ref="user" />  
  15.     </bean>  
  16.   
  17.     <!-- 配置代理工厂bean -->  
  18.     <bean id="service"  
  19.         class="org.springframework.aop.framework.ProxyFactoryBean">  
  20.         <property name="proxyInterfaces">  
  21.             <value>org.test.lighter.TestCommunity</value>  
  22.         </property>  
  23.         <property name="target" ref="authTarget"/>  
  24.         <property name="interceptorNames">  
  25.             <list>  
  26.                 <value>TestAuthorityInterceptor</value>  
  27.             </list>  
  28.         </property>  
  29.     </bean>  
  30.   
  31.     <bean id="testResult" class="org.test.lighter.TestResultImpl">  
  32.         <property name="test" ref="service" />  
  33.     </bean>  
  34. </beans>  

<script>render_code();</script>

 

再写一个执行文件BeanTest:

代码
  1. import org.springframework.context.ApplicationContext;   
  2. import org.springframework.context.support.FileSystemXmlApplicationContext;   
  3.   
  4. public class BeanTest {   
  5.   public static void main(String[] args) throws Exception   
  6.   {   
  7.       ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");   
  8.       TestResultImpl test = (TestResultImpl)ctx.getBean("testResult");   
  9.       test.answerTopic();   
  10.       test.deleteTopic();   
  11.   }   
  12. }  

<script>render_code();</script>

 

执行结果:大家猜一下啦

代码
  1. 1、如果是管理员,打印出:   
  2. 可以发表,回复帖子   
  3. 可以删除帖子!   
  4.   
  5. 2、如果是注册用户:   
  6. 可以发表,回复帖子   
  7. 你的身份是注册用户,没有权限删除帖子   
  8.   
  9. 3、未注册用户:   
  10. 你的身份是未注册用户,没有权限回复,删除帖子!  

<script>render_code();</script>

分享到:
评论

相关推荐

    拿捏面试官-Spring AOP IOC源码笔记

    Spring的核心特性是控制反转(IOC)和面向切面编程(AOP)。它提供了一个全面的编程和配置模型,可以用于构建各种类型的Java应用程序,包括Web应用。 1. **Spring介绍** - **侵入式概念**:传统Java EE应用中,...

    马士兵老师spring框架学习笔记

    马士兵老师的Spring框架学习笔记会详细讲解这些概念,并结合实例帮助读者理解并掌握如何在实际项目中应用Spring框架。通过学习,你可以提升Java开发技能,更好地理解和运用Spring生态,为你的职业发展奠定坚实基础。

    Spring笔记.doc

    Spring 与 Struts 整合主要目的是利用 Spring 的 IoC 容器管理 Struts 中的 Action 对象,减少对象的重复实例化,提高性能。整合步骤包括: 1. 手动方式:Struts Action 非单例,每次请求都会实例化新的 Action,...

    动力节点老杜Spring6,配套笔记PDF文件

    动力节点老杜Spring6配套笔记主要讲解了Spring框架的一些核心概念和最佳实践,特别是针对代码设计中的开闭原则(Open-Closed Principle, OCP)进行了深入探讨。在给出的代码示例中,我们可以看到一个简单的用户登录...

    Spring学习笔记&源码

    Spring框架是Java开发中不可或缺的一部分,它以其IoC(控制反转)和AOP(面向切面编程)的核心特性,极大地简化了企业级应用的开发。本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程...

    spring笔记

    Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...

    Spring相关的笔记,包含ioc、DI、AOP、Spring事务等等

    这份笔记涵盖了Spring的核心概念和技术,包括IOC(Inverse of Control,控制反转)、DI(Dependency Injection,依赖注入)、AOP(Aspect Oriented Programming,面向切面编程)以及Spring事务管理。以下是对这些...

    Spring IOC和AOP代码与笔记整理

    在传统开发中,对象通常会自行创建依赖的对象,而在Spring中,开发者只需定义对象及其依赖关系,由Spring容器负责实例化、装配以及管理这些对象。 1. **Bean定义**:在Spring中,业务对象被称为Bean。Bean定义包含...

    百知教育Spring详解笔记.rar

    Spring框架是Java开发中的核心组件,它以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大特性而著名,为开发者提供了全面的解决方案,包括依赖注入、数据访问、...

    Spring5笔记.zip

    在Spring5中,开发者不再需要手动创建和管理对象,而是由Spring容器负责实例化、装配和管理,这使得代码更易于测试和维护。 2. **依赖注入(DI)**: 作为IoC的一种实现方式,依赖注入允许对象通过构造函数、...

    spring5源码分析笔记

    3. **AOP(面向切面编程)**:Spring的AOP模块支持声明式事务管理、日志记录、性能监控等。切面是包含关注点的模块化单元,可以将横切关注点如事务逻辑应用到多个对象上。 4. **IoC容器与Bean生命周期**:Spring ...

    spring学习笔记(3.20)

    因此,这部分笔记可能涵盖了如何使用这些工厂来实例化和管理Spring Bean。 基于以上分析,我们可以期待这篇"spring学习笔记(3.20)"中包含以下知识点: 1. **Spring框架基础**:介绍Spring的基本概念、架构和核心...

    Spring全家桶知识笔记.pdf

    Spring框架的核心特性包括轻量级、控制反转(IoC)、面向切面编程(AOP)、容器化管理和框架集合,使其在与其他框架的整合上非常灵活。 在Spring中,bean的注入与装配是核心概念之一,有多种方式可以实现,例如XML...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    spring个人学习笔记

    - AOP编程支持:Spring提供AOP机制,可以方便地实现横切关注点,如事务管理、日志记录等,提高代码的复用性。 - 声明式事务管理:Spring支持声明式事务,通过注解或XML配置即可实现事务的统一管理,无需手动编写事务...

    狂神说Spring5最全笔记

    - **面向切面编程(AOP)**:Spring提供了强大的面向切面编程支持,允许开发者将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来。 - **事务处理**:Spring提供了一套完整的事务管理机制,可以方便地集成到...

    itheima_spring_aop.rar

    2. **AOP(面向切面编程)**:AOP是Spring框架中的一个重要特性,用于处理系统中分散的、与业务逻辑无关的横切关注点,如日志记录、权限检查、事务管理等。AOP通过定义切面、通知(advice)、切入点(pointcut)等...

Global site tag (gtag.js) - Google Analytics