Model 就不给了,直接给业务逻辑。
beas.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.vti"></context:component-scan> <bean id="articleService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.vti.service.ArticleService</value> </property> <property name="target" ref="authTarget"/> <property name="interceptorNames"> <list> <value>authority</value> </list> </property> </bean> </beans>
daoimpl
package com.vti.dao.impl; import org.springframework.stereotype.Component; import com.vti.dao.ArticleDao; import com.vti.model.Article; @Component(value="articleDao") public class ArticleDaoImpl implements ArticleDao{ @Override public void addArticle(Article article) { System.out.println("文章添加成功!"); } @Override public void delArticle(Article article) { System.out.println("文章删除成功!"); } @Override public void getArticle() { System.out.println("阅读文章成功"); } }
artcleServiceImpl
package com.vti.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.vti.dao.ArticleDao; import com.vti.model.Article; import com.vti.service.ArticleService; @Component(value="authTarget") public class ArticleServiceImpl implements ArticleService{ private ArticleDao articleDao; public ArticleDao getArticleDao() { return articleDao; } @Resource public void setArticleDao(ArticleDao articleDao) { this.articleDao = articleDao; } @Override public void addArticle(Article article) { articleDao.addArticle(article); } @Override public void delArticle(Article article) { articleDao.delArticle(article); } @Override public void getArticle() { articleDao.getArticle(); } }
AuthorityInterceptor
package com.vti.aop; import javax.annotation.Resource; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.stereotype.Component; import com.vti.proxy.UserProxy; @Component(value="authority") public class AuthorityInterceptor implements MethodInterceptor{ private UserProxy proxy; public UserProxy getProxy() { return proxy; } @Resource public void setProxy(UserProxy proxy) { this.proxy = proxy; } @Override public Object invoke(MethodInvocation invocation) throws Throwable { String methodName = invocation.getMethod().getName(); int authority=proxy.getUser().getAuthority(); if (authority==1){//普通用户 if (methodName.equals("getArticle")) { return invocation.proceed(); }else { System.out.println("无权限"); return null; } }else if (authority==2){//发布用户 if (methodName.equals("getArticle")) { return invocation.proceed(); }else if (methodName.equals("addArticle")) { return invocation.proceed(); }else { System.out.println("无权限"); return null; } }else { //管理用户 return invocation.proceed(); } } }
UserProxy
package com.vti.proxy; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.vti.model.Article; import com.vti.model.User; import com.vti.service.ArticleService; @Component(value="proxy") public class UserProxy{ private User user; private ArticleService articleService; public ArticleService getArticleService() { return articleService; } @Resource public void setArticleService(ArticleService articleService) { this.articleService = articleService; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void add() { Article article=new Article(); articleService.addArticle(article); } public void del() { Article article=new Article(); articleService.delArticle(article); } public void read() { articleService.getArticle(); } }
Test
package com.vti.test; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.vti.model.User; import com.vti.proxy.UserProxy; public class AOPTest { public static void main(String[] args) { ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); UserProxy proxy=context.getBean(UserProxy.class); User user=new User(); user.setAuthority(1); proxy.setUser(user); proxy.del(); } }
测试结果如下:
setAuthority=1,只能阅读
setAuthority=2,能添加也能阅读
setAuthority=3.,还能删除
大家自己测试,建议熟悉了SSH的人才来做这个。