From:http://lighter.iteye.com
下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:
代码
- public class User {
- private String username;
-
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
<script>render_code();</script>
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
代码
- public interface TestCommunity {
- public void answerTopic();
- public void deleteTopic();
- }
<script>render_code();</script>
实现上面接口的TestCommunityImpl类:
代码
- public class TestCommunityImpl implements TestCommunity {
-
- public void answerTopic() {
- System.out.println("可以发表,回复帖子");
- }
-
- public void deleteTopic() {
- System.out.println("可以删除帖子!");
- }
- }
<script>render_code();</script>
下一步,建立一下依赖注入的实现类TestResultImpl:
代码
- public class TestResultImpl {
- private TestCommunity test;
-
- public void setTest(TestCommunity test) {
- this.test = test;
- }
- public void answerTopic()
- {
- test.answerTopic();
- }
- public void deleteTopic()
- {
- test.deleteTopic();
- }
- }
<script>render_code();</script>
接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:
代码
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
-
-
- public class TestAuthorityInterceptor implements MethodInterceptor {
- private User user;
-
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
-
-
- public Object invoke(MethodInvocation invocation) throws Throwable {
- String methodName = invocation.getMethod().getName();
-
- if (user.getUsername().equals("unRegistedUser")) {
- System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");
- return null;
- }
- if ((user.getUsername().equals("user"))
- && (methodName.equals("deleteTopic"))) {
- System.out.println("你的身份是注册用户,没有权限删除帖子");
- return null;
- }
-
- return invocation.proceed();
- }
-
- }
<script>render_code();</script>
配置文件:
代码
- <?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="authTarget" class="org.test.lighter.TestCommunityImpl" />
-
-
- <bean id="user" class="org.test.lighter.User">
- <property name="username" value="user" />
- </bean>
-
-
- <bean id="TestAuthorityInterceptor"
- class="org.test.lighter.TestAuthorityInterceptor">
- <property name="user" ref="user" />
- </bean>
-
-
- <bean id="service"
- class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>org.test.lighter.TestCommunity</value>
- </property>
- <property name="target" ref="authTarget"/>
- <property name="interceptorNames">
- <list>
- <value>TestAuthorityInterceptor</value>
- </list>
- </property>
- </bean>
-
- <bean id="testResult" class="org.test.lighter.TestResultImpl">
- <property name="test" ref="service" />
- </bean>
- </beans>
<script>render_code();</script>
再写一个执行文件BeanTest:
代码
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
-
- public class BeanTest {
- public static void main(String[] args) throws Exception
- {
- ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");
- TestResultImpl test = (TestResultImpl)ctx.getBean("testResult");
- test.answerTopic();
- test.deleteTopic();
- }
- }
<script>render_code();</script>
执行结果:大家猜一下啦
代码
- 1、如果是管理员,打印出:
- 可以发表,回复帖子
- 可以删除帖子!
-
- 2、如果是注册用户:
- 可以发表,回复帖子
- 你的身份是注册用户,没有权限删除帖子
-
- 3、未注册用户:
- 你的身份是未注册用户,没有权限回复,删除帖子!
<script>render_code();</script>
分享到:
相关推荐
在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(Aspect Oriented Programming,面向切面编程)是其核心特性之一,用于处理系统中的横切关注点,如日志、事务管理等。本实例将深入探讨如何在...
**Spring AOP 使用实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们...
在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...
Spring AOP的XML配置实例展示了如何将横切关注点(如日志、事务等)与业务逻辑解耦,提高了代码的可复用性和可维护性。这种编程模式在大型项目中尤其有用,因为它使得系统的结构更加清晰,每个组件都专注于自己的...
在本实例中,Spring AOP可能被用来实现事务管理,确保数据库操作的一致性。 3. Spring Security:这是一个强大的安全框架,提供认证、授权和会话管理等功能。Spring Security可以保护你的应用免受各种攻击,如跨站...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、事务管理、权限控制等。本实例将深入探讨如何在Spring 4.0版本中实现AOP。 首先,AOP的...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、性能监控等,并将它们模块化为可重用的组件,称为切面。本实例主要探讨如何在Spring AOP中实现拦截器。 ...
在Web项目中,Spring AOP通常用于处理跨多个控制器和业务层方法的通用任务,如记录请求日志、验证权限、事务管理等。通过配置或注解,你可以确保这些逻辑在每次相关方法执行时自动触发,从而提高代码的可读性和可...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义“切面”,这些切面封装了应用程序中的交叉关注点,如日志、事务管理、权限检查等。Spring AOP是基于代理的,它可以为普通Java对象(POJOs)...
以下是一个简单的Spring AOP代码实例,用于展示如何创建切面、通知以及如何配置切入点: 1. 首先,定义一个切面类,包含一个前置通知: ```java @Aspect @Component public class LoggingAspect { @Before(...
在实际的项目中,Spring AOP常用于事务管理、日志记录、性能监控、权限控制等场景。理解并熟练掌握Spring AOP,可以帮助我们编写更加模块化、可维护的代码,提升代码质量。通过上述的讲解,相信你已经对Spring AOP有...
9. **实际应用场景**:课程可能还会通过实例讲解AOP在实际项目中的应用,如记录日志、事务管理、权限校验等。 10. **最佳实践**:了解如何优雅地使用AOP,避免滥用导致的代码复杂性增加,以及如何进行测试和调试AOP...
8. **AOP应用场景**:Spring AOP广泛应用于日志记录、事务管理、权限控制、缓存管理等场景。通过切面可以将这些通用功能与业务逻辑解耦,提高代码的可维护性和可重用性。 总之,Spring AOP的默认代理方式是动态代理...
本文将基于"spring aop小实例"的标题,结合描述中的链接,深入探讨Spring AOP的基本概念、工作原理以及如何通过实际示例来理解和应用。 1. **AOP基本概念** - 面向切面编程(AOP)是面向对象编程(OOP)的补充,它允许...
在本实例中,我们主要探讨的是如何利用Maven构建一个基于Spring框架的Web应用程序,特别是关注Spring AOP(面向切面编程)在用户注册功能中的应用。Maven是一个强大的项目管理和依赖管理工具,它帮助开发者组织和...
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
Spring AOP(面向切面编程)则是一种流行的应用框架,它利用动态代理来实现对业务代码的切面增强,如日志、事务管理等。现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。Spring 2.0引入了基于注解的AOP配置,极大地简化了AOP的使用。这篇...