第十章 記錄日誌
內容:
1. 實現記錄日誌功能(服務)
2. 將日誌服務,註冊到Spring容器
3. 基於AOP方面編程思想,利用Spring中的前置通知,在實現用戶登陸的時候,自動記錄日誌
實現記錄日誌功能
我們有前面用戶服務開發和商品服務開發基礎後,對日誌服務的開發應該很簡單了,主要也是定義Log的接口,調用LogDAO實現接口。這裏我們就不詳細重複了,如下是對應的代碼清單:
Logging.java
package cn.com.book.demo.services;
public interface Logging {
/**
* 記錄指定信息
* */
public void logging(String str);
}
LoggingImpl.java
/**
*
*/
package cn.com.book.demo.services.impl;
import java.util.Date;
import cn.com.book.demo.hibernate.dao.Log;
import cn.com.book.demo.hibernate.dao.LogDAO;
import cn.com.book.demo.services.Logging;
/**
* @author Noble.Yang
*
*/
public class LoggingImpl implements Logging {
private LogDAO logDAO = null;
public void setLogDAO(LogDAO logDAO) {
this.logDAO = logDAO;
}
/* (non-Javadoc)
* @see cn.com.book.demo.services.Logging#logging(java.lang.String)
* 專門用戶記錄用戶登陸的日誌
*/
public void logging(String userName) {
Log log = new Log(userName + " login in", new Date());
this.logDAO.save(log);
}
private void initDAO(){
if(this.logDAO == null){
this.logDAO = new LogDAO();
}
}
}
註冊日誌服務
代碼準備好了,接着同以前的邏輯一樣,將日誌服務註冊到Spring裏面去。具體操作同以前的一樣:
1. 在applicationContext-service.xml中註冊日誌服務
<!-- 日誌服務 -->
<bean id="loggingService" class="cn.com.book.demo.services.impl.LoggingImpl">
<property name="logDAO">
<ref bean="LogDAO"/>
</property>
</bean>
這樣,我們在Spring中就註冊了日誌服務,id是loggingService
2. 在applicationContext-service.xml中,對註冊好的日誌服務,添加事務管理
<bean id="loggingServiceProxy" parent="baseServiceProxy">
<property name="target">
<ref bean="loggingService" />
</property>
<property name="transactionAttributes">
<props>
<prop key="log*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
同樣,我們註冊一個基於Spring的代理事務代理,對日誌服務中的log開頭的方法,進行方法級別的事務管理。