hibenate 차단기
5329 단어 Hibernate차단기Interceptor
작업량 이 얼마 인지, 작업량 이 얼마 없 는 지 는 말 하지 않 고 복사 하면 된다.적어도 이것 은 불필요 한 코드 가 많 을 것 이다. 시스템 구조 에 있어 이것 은 처음부터 잘 처리 해 야 한다.이때 마침 히 베 네 이 트 차단기 가 나 타 났 다.이 동시에 이 차단 기 는 시스템 에 어떠한 영향 도 주지 않 고 수시로 제거 할 수 있 으 며 프레임 의 전체 성에 도 잘못된 영향 을 주지 않 으 며 완전히 삽입 하고 사용 할 수 있다.
package com.todaysteel.esaasfront.whs.common;
import java.io.Serializable;
import java.util.Date;
import org.apache.log4j.Logger;
import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;
import org.springframework.stereotype.Component;
import com.todaysteel.core.utils.security.SpringSecurityUtils;
import com.todaysteel.esaasfront.publiccloud.commom.security.vo.Authorization;
/**
* @author liuhaixiao
* hibernate :
* , ;
* , ;
*/
@Component
public class PropertyInterceptor extends EmptyInterceptor {
private static final Logger log = Logger.getLogger(PropertyInterceptor.class);
private static final long serialVersionUID = 1L;
@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
log.info("------Hibernate Interceptor-----onSave-----");
Authorization user = SpringSecurityUtils.getCurrentUser();
//
for (int index=0;index<propertyNames.length;index++) {
// " "
if ("dadddate".equals(propertyNames[index])) {
// " "
if(state[index]==null){
state[index] = new Date();
}
continue;
} else if ("saddoperator".equals(propertyNames[index])) {// " "
// " "
if(state[index]==null){
state[index] = user.getUsername();
}
continue;
}
}
return true;
}
@Override
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
log.info("------Hibernate Interceptor-----onFlushDirty-----");
Authorization user = SpringSecurityUtils.getCurrentUser();
//
for (int index=0;index<propertyNames.length;index++) {
/* " " */
if ("dmodifydate".equals(propertyNames[index])) {
/* " " */
currentState[index] = new Date();
continue;
} else if ("smodifyoperator".equals(propertyNames[index])) {/* " " */
/* " " */
currentState[index] = user.getUsername();
continue;
}
}
return true;
}
}
hibenate 는 많은 차단 기 를 제공 합 니 다. 실제 사용 해 야 원본 코드 를 볼 수 있 습 니 다. spring 과 유사 한 AOP 메커니즘 입 니 다.
마찬가지 로 전자상거래 사이트 가 로 그 를 감시 해 야 하 는 내용 도 이 차단기 로 사용 자 를 추적 할 수 있다.
물론 사용자 추적 로그 행 위 를 AOP 로 처리 하 는 것 이 좋 습 니 다.
저 는 설정 방식 으로 차단 기 를 사용 하기 때문에 xml 에서 설정 해 야 합 니 다.
<!-- hibernate -->
<bean id ="proInterceptor" class="com.todaysteel.esaasfront.whs.common.PropertyInterceptor" />
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="DynamicDataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache/ehcache-hibernate-local.xml</prop>
</props>
</property>
<property name="packagesToScan" value="com.todaysteel.esaasfront,com.todaysteel.core.business" />
<property name="entityInterceptor" ref="proInterceptor"/>
</bean>
나 는 이 차단기 의 역할 영역 을 session 단계 에 두 었 기 때문에 sesisonFactory 에 설정 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.