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的人才来做这个。