vjame

优化代码是无止境的
随笔 - 65, 文章 - 9, 评论 - 26, 引用 - 0
数据加载中……

Spring AOP控制日志管理

1. 编写po类 LogInfo
package com.strongit.credit.manager.log.po;

/**
 * LogInfo generated by MyEclipse Persistence Tools
 
*/

public class LogInfo implements java.io.Serializable {

    
// Fields

    
/**
     * 
     
*/
    
private static final long serialVersionUID = 1L;

    
private Long logId;

    
private String logUserName;

    
private String logOrgName;

    
private String logContent;

    
private String logIp;

    
private String remark;

    
private String logDate;

    
private String logOrgId;

    
// Constructors

    
/** default constructor */
    
public LogInfo() {
    }

    
/** full constructor */
    
public LogInfo(String logUserName, String logOrgName, String logContent,
            String logIp, String remark, String logDate, String logOrgId) {
        
this.logUserName = logUserName;
        
this.logOrgName = logOrgName;
        
this.logContent = logContent;
        
this.logIp = logIp;
        
this.remark = remark;
        
this.logDate = logDate;
        
this.logOrgId = logOrgId;
    }

    
// Property accessors

    
public Long getLogId() {
        
return this.logId;
    }

    
public void setLogId(Long logId) {
        
this.logId = logId;
    }

    
public String getLogUserName() {
        
return this.logUserName;
    }

    
public void setLogUserName(String logUserName) {
        
this.logUserName = logUserName;
    }

    
public String getLogOrgName() {
        
return this.logOrgName;
    }

    
public void setLogOrgName(String logOrgName) {
        
this.logOrgName = logOrgName;
    }

    
public String getLogContent() {
        
return this.logContent;
    }

    
public void setLogContent(String logContent) {
        
this.logContent = logContent;
    }

    
public String getLogIp() {
        
return this.logIp;
    }

    
public void setLogIp(String logIp) {
        
this.logIp = logIp;
    }

    
public String getRemark() {
        
return this.remark;
    }

    
public void setRemark(String remark) {
        
this.remark = remark;
    }

    
public String getLogDate() {
        
return this.logDate;
    }

    
public void setLogDate(String logDate) {
        
this.logDate = logDate;
    }

    
public String getLogOrgId() {
        
return this.logOrgId;
    }

    
public void setLogOrgId(String logOrgId) {
        
this.logOrgId = logOrgId;
    }

}

2. 编写action  class LogManage
package com.strongit.credit.manager.log.action;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.strongit.credit.manager.log.po.LogInfo;

/**
 * 
 * 
@author lanjh
 * @ 2008-10-20  上午10:18:04
 *
 
*/
public class LogManage extends HibernateDaoSupport {
    
/**
     * 保存日志信息
     * 
@param joinpoint
     * 
@return
     
*/
    
public boolean getLog(final LogInfo logInfo) {
        
boolean flag = false;
        LogInfo logInfo 
= null;
        
try {
      
      this.getHibernateTemplate().save(logInfo);
            
this.getHibernateTemplate().flush();
            flag 
= true;
        } 
catch (Exception e) {
            flag 
= false;
            e.printStackTrace();
        }
        
return flag;
    }
}


3 . spring 配置文件
<?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:aop
="http://www.springframework.org/schema/aop"
    xmlns:tx
="http://www.springframework.org/schema/tx"
    xmlns:jee
="http://www.springframework.org/schema/jee"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"
>
    
    
<!-- AOP控制 角色管理 日志管理 -->
    
<bean id="log" class="com.strongit.credit.manager.log.action.LogManage">
        
<property name="sessionFactory">
            
<ref bean="sessionFactory"/>
        
</property>
    
</bean>    
    
    
<!-- AOP控制 树形管理 -->
    
<!-- 增加-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="treeInsertMethods" expression="execution(* com.strongit.credit.manager.treemanager.service.*.add*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="treeInsertMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 编辑 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="treeUpdateMethods" expression="execution(* com.strongit.credit.manager.treemanager.service.*.update*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="treeUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="treeDeleteMethods" expression="execution(* com.strongit.credit.manager.treemanager.service.*.delete*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="treeDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
<!-- AOP控制 信息管理模块 -->
    
<!-- 增加-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="infoInsertMethods" expression="execution(* com.strongit.credit.manager.infomanager.service.*.insert*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="infoInsertMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 编辑 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="infoUpdateMethods" expression="execution(* com.strongit.credit.manager.infomanager.service.*.update*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="infoUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="infoDeleteMethods" expression="execution(* com.strongit.credit.manager.infomanager.service.*.delete*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="infoDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 审核与消审 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="infoIsauditMethods" expression="execution(* com.strongit.credit.manager.infomanager.service.*.isaudit(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="infoIsauditMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
<!-- AOP控制 意见建议模块 -->
    
<!-- 回复 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="recommandUpdateMethods" expression="execution(* com.strongit.credit.manager.recommandmanager.service.*.update*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="recommandUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="recommandDeleteMethods" expression="execution(* com.strongit.credit.manager.recommandmanager.service.*.delete*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="recommandDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 审核与消审 -->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="recommandIsauditMethods" expression="execution(* com.strongit.credit.manager.recommandmanager.service.*.isaudit*(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="recommandIsauditMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
    
<!-- AOP控制 企业账号管理 -->
    
<!-- 增加-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="memberInsertMethods" expression="execution(* com.strongit.credit.manager.membermanager.service.*.save(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="memberInsertMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="memberDeleteMethods" expression="execution(* com.strongit.credit.manager.membermanager.service.*.delete(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="memberDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 修改-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="memberUpdateMethods" expression="execution(* com.strongit.credit.manager.membermanager.service.*.update(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="memberUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
<!-- AOP控制 个人账号管理 -->
    
<!-- 增加-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="personalInsertMethods" expression="execution(* com.strongit.credit.manager.personalmanager.service.*.save(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="personalInsertMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="personalDeleteMethods" expression="execution(* com.strongit.credit.manager.personalmanager.service.*.delete(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="personalDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 更新-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="personalUpdateMethods" expression="execution(* com.strongit.credit.manager.personalmanager.service.*.update(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="personalUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
    
<!-- AOP控制 投票主题管理 -->
    
<!-- 增加-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="themeInsertMethods" expression="execution(* com.strongit.credit.manager.poll.service.*.save(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="themeInsertMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 删除-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="themeDeleteMethods" expression="execution(* com.strongit.credit.manager.poll.service.*.del(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="themeDeleteMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
<!-- 更新-->
    
<aop:config>
        
<aop:aspect ref="log">
            
<aop:pointcut id="themeUpdateMethods" expression="execution(* com.strongit.credit.manager.poll.service.*.isaudit(..))"/>
            
<aop:after-returning method="getLog" pointcut-ref="themeUpdateMethods" returning="retVal"/>
        
</aop:aspect>
    
</aop:config>
    
    
</beans>


4 . gg

5、no gg,,,go on 。 by lanjh  2011.9.8

另外还可以采用一种方式

   
/**
     * <aop:config>
        <aop:aspect ref="log">
            <aop:pointcut id="AllCreateMethods" expression="execution(* com.strongit..service.*.create*(..))"/>
            <aop:around method="recordLog1"  pointcut-ref="AllCreateMethods"/>
        </aop:aspect>
    </aop:config>
     * 
@param logInfo
     
*/
    
public void recordLog1(final ProceedingJoinPoint joinpoint) {

        
try {
        
this.getHibernateTemplate().execute(new HibernateCallback() {
            
public Object doInHibernate(Session session)
                    
throws HibernateException, SQLException {
                
try {
                    session.save((StrongLogInfo) joinpoint.proceed());
                } 
catch (Throwable e) {
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }
                session.flush();
                
return null;
            }
        });
    } 
catch (Exception e) {
        e.printStackTrace();
    }

posted on 2008-11-12 21:07 lanjh 阅读(5439) 评论(5)  编辑  收藏 所属分类: Java Web

评论

# re: Spring AOP控制日志管理  回复  更多评论   

太繁琐了,expression="execution(),expression=execution()",可以这么写
2009-02-23 17:48 | hbz-bj

# re: Spring AOP控制日志管理[未登录]  回复  更多评论   

哥们,你真的可以启动你的服务器吗?
ProceedingJoinPoint只能在Around Advice中使用,你给出的全是after-returning Advice。。。
2009-03-11 16:54 | Arthur

# re: Spring AOP控制日志管理  回复  更多评论   

@hbz-bj
这样也可以么? 太好了
2011-04-30 22:47 | qql

# re: Spring AOP控制日志管理[未登录]  回复  更多评论   

可以把ProceedingJoinPoint换成JoinPoint@Arthur
2011-08-17 17:09 | Leon

# re: Spring AOP控制日志管理  回复  更多评论   

没看明白 日志实体是怎么被赋值的
2011-10-17 16:06 | wunan

只有注册用户登录后才能发表评论。


网站导航: