首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring AOP现实项目中使用案例

2012-07-04 
Spring AOP实际项目中使用案例package com.xxx.utilimport org.aspectj.lang.annotation.Aspectimport o

Spring AOP实际项目中使用案例
package com.xxx.util;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Repository;import com.xxx.domain.BaseDomain;@Aspect@Repository("maintainAspect")public class MaintainAspect {final static Logger logger = LoggerFactory.getLogger(MaintainAspect .class);//扫描路径访问规则,对所有add**的方法进行代理写入//所有需要代理写入的方法必须继承BaseDomain,然后强制写入相关用户信息@Before("execution(public * com.xxx.dao.impl.*.add*(..)) && args(baseDomain,..)")public void appendCreateInfo(BaseDomain baseDomain) throws Exception {if (baseDomain instanceof Session || baseDomain instanceof SystemLog) {return;}Session session = ThreadVariable.getSession();if (session == null || session.getUserName() == null) {logger.error("系统尝试在无登陆的情况下添加[{}]对象", baseDomain.getClass().getName());throw new Exception("Session不存在,系统不能正常工作!");}baseDomain.setCreateDate(session.getAccessTime());baseDomain.setCreateUser(session.getUserName());}@Before("execution(public * com.tianque.locationtalk.dao.impl.*.update*(..)) && args(baseDomain,..)")public void appendUPdateInfo(BaseDomain baseDomain) throws Exception {if (baseDomain instanceof Session || baseDomain instanceof SystemLog) {return;}Session session = ThreadVariable.getSession();if (session == null || session.getUserName() == null) {logger.error("系统尝试在无登陆的情况下更新[{}]对象,对象ID为[{}]", baseDomain.getClass().getName(), baseDomain.getId());throw new Exception("Session不存在,系统不能正常工作!");}baseDomain.setUpdateDate(session.getAccessTime());baseDomain.setUpdateUser(session.getUserName());}}

?配置环境方面不需要任何更改,也不需要影响之前任何代码,即可实现对相关的数据对象自动添加createuser,createdate,updateuser,updatedate。

?

AOP非常good,这种没有侵害的改造让人非常赏心悦目。很多时候都是人云亦云,以为AOP只能处理事务、日志等东西,实际上AOP远不止的,我们可以让我们的代码变得更加有质量的。

热点排行