日期:2014-05-17 浏览次数:21145 次
Create table 'log'(
'id' int(11) not null;
'name' varchar(20) default null;
'method' varchar(20) default null;
'time' timestamp default null;
primary key('id')
)engine=InnoDB default charset=uft8
/**
* 使用AspectJ实现登录登出日志AOP
* @author wuxw920
*/
@Aspect
public class LogAspect{
@Autowired
@Qualifier("hibernateDao")
private LogDAO logDao;
@After("execution(* com.wuxw920.ssh.LoginAction.login(..))")
public void afterLoginLog(JoinPoint joinPoint) throws Throwable{
User user = (User)ServletActionContext.getRequest().getSesion().getAttribute("user");
if(user != null){
saveLog(user,joinPoint);//保存登入日志
}
}
@Before("execution(* com.wuxw920.ssh.LoginAction.logout(..))")
public void beforeLogoutLog(JoinPoint joinPoint) throws Throwable{
User user = (User)ServletActionContext.getRequest().getSesion().getAttribute("user");
if(user != null){
saveLog(user,joinPoint);//保存登出日志
}
}
private void saveLog(User user , JoinPoint joinPoint){
Log log = new Log();
log.setName(user.getName());
log.setMethod(joinPoint.getSignature().getName());//切入方法
log.setTime(new Timestamp(System.currentTimeMillis()));时间
logDao.save(log);
}
}
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />,作用是确保Spring的自动装配策略总是被考虑。默认为false,如果不将它改为true,则在使用CGLib代理Action类后,使用@Autowired注入的service类将会为null,那么这些目标方法中与数据库交互的逻辑都不能执行,所以一定要将它改为true。
<aop:aspectj-autoproxy proxy-target-class="true" />声明,为Spring容器中那些匹配@AspectJ切面的Bean创建代理,其中的proxy-target-class="true" 表示使用CGLib动态代理技术织入增强,不过只声明还不行,还得织入,把编写好的切面类完整路径添加到配置文件中,这样才能发挥切面的功能。