自定义拦截器要实现Interceptor接口,拦截器也是用观察者模式来设计的,重写Interceptor里面的方法,在特定条件下,这些方法就会被调用。
在Interceptor对象的方法中不能直接使用Session对象执行持久化操作,如果需要在拦截的同时使用Session对象完成持久化,可以使用Hibernate中事件监听.
下面举例拦截器,将数据的增,删,改信息保存到日志文件中,其中要用到log4j.
编写自定义拦截器LogInterceptor.java:
1 public class LogInterceptor extends EmptyInterceptor { 2 //对LogInterceptor这个类的日志进行处理 3 private Logger logger = Logger.getLogger(LogInterceptor.class); 4 5 @Override 6 public boolean onSave(Object entity, Serializable id, Object[] state, 7 String[] propertyNames, Type[] types) { 8 logger.info("保存数据"); 9 //如果修改了持久化对象的状态,返回true;否则返回false 10 return false; 11 } 12 13 @Override 14 public void onDelete(Object entity, Serializable id, Object[] state, 15 String[] propertyNames, Type[] types) { 16 logger.info("删除数据"); 17 } 18 19 @Override 20 public boolean onFlushDirty(Object entity, Serializable id, 21 Object[] currentState, Object[] previousState, 22 String[] propertyNames, Type[] types) { 23 logger.info("修改数据"); 24 //如果修改了持久化对象的状态,返回true;否则返回false 25 return false; 26 } 27 }
拦截器的加载可以在解析配置文件之前进行加载,也可以在打开Session的时候进行加载:
在解析配置文件配置文件之前加载:
1 static { 2 Configuration cfg = null; 3 // 解析配置文件 4 try { 5 cfg = new Configuration(); 6 //在解析配置文件时加载过滤器 7 cfg.setInterceptor(new LogInterceptor()); 8 cfg.configure(); 9 } 10 catch (Exception e) { 11 e.printStackTrace(); 12 } 13 factory = cfg.buildSessionFactory(); 14 }
在打开Session的时候进行加载:
1 Configuration cfg = new Configuration(); 2 cfg.configure(); 3 SessionFactory factory = cfg.buildSessionFactory(); 4 Session session = factory.openSession(new LogInterceptor()); 5 Transaction ts = session.beginTransaction();
注意:在打开Session的时候进行拦截器加载,这个拦截器只在当前session中有效.
配置log4j.properties:
log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%c] %m%n
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss}][%c] %m%n
log4j.appender.appender2.File=HongtenLog4j.log
相关推荐
14. **事件监听器和拦截器**:允许在特定的生命周期事件中插入自定义代码,用于实现业务逻辑或日志记录。 15. **CGLIB和JPA支持**:介绍Hibernate对CGLIB代理和Java Persistence API(JPA)的集成。 总之,...
Hibernate拦截器允许我们在实体的生命周期事件中插入自定义行为,如在保存、更新或删除实体前/后执行某些操作。这在日志记录、权限控制等场景非常有用。 5. **hibernate_09_006_Procedure**: 在这一章,可能会...
7. **事件和拦截器**:讲解了如何利用Hibernate的事件机制和拦截器来实现自定义的行为,如对象的生命周期事件监听、数据访问的前处理和后处理等。 8. **性能优化**:提供了关于如何优化Hibernate应用的建议,包括...
在配置文件 `hibernate.cfg.xml` 或者 `Configuration` 实例中,可以通过 `setProperty` 方法设置 `hibernate.event.interceptor` 属性为拦截器的全限定类名。 ```java Configuration configuration = new ...
它通过Action类处理请求,使用OGNL(Object-Graph Navigation Language)进行数据绑定,支持拦截器机制,能方便地进行权限控制和日志记录等。 再者,Hibernate是一个对象关系映射(ORM)框架,它允许开发者使用Java...
- **Interceptor拦截器**:用于在Action执行前后进行预处理和后处理,例如权限验证和日志记录。 2. **Spring框架**: - **依赖注入(DI)**:通过Spring管理Bean的生命周期,实现组件间的解耦。 - **事务管理**...
Struts2提供了丰富的拦截器、结果类型和插件机制,使得开发者可以轻松地实现表单验证、国际化、日志记录等功能。在本项目中,你可以看到Action类的定义,以及配置文件struts.xml中的相关配置,了解如何定义Action与...
- **Interceptor拦截器**:Struts2提供了拦截器机制,可以在Action执行前后进行额外的操作,比如登录检查、日志记录等。 2. **Hibernate**: - **实体类**:Hibernate通过注解或XML配置将数据库表映射为Java对象...
3. **Struts2配置**:配置struts.xml文件,定义Action的入口点、结果类型、拦截器栈等。 **五、测试与优化** 1. 编写测试用例,对DAO、Service和Action进行单元测试和集成测试,确保每个层次的功能正常。 2. 调整...
Struts2提供了强大的拦截器机制,允许开发者自定义行为,实现业务逻辑与表现层的解耦。此外,Struts2还支持多种视图技术,如JSP、FreeMarker等,以及丰富的插件系统,使得开发者可以轻松扩展功能。 接下来是Spring...
2. **2.5.2 使用拦截器的步骤**:定义拦截器类,配置拦截器的规则,在Struts配置文件中指定哪些Action需要被拦截。 3. **2.5.3 一个例子**:假设有一个登录Action,需要在执行前验证用户是否已经登录。可以创建一个...
Struts2提供了强大的表单验证、国际化支持和丰富的拦截器,使得开发者可以方便地控制应用程序的行为。在这个图书管理系统中,Struts2负责接收用户的请求,处理业务逻辑,并将结果返回给用户,起到了承上启下的桥梁...
9. **事件监听与拦截器**:Hibernate允许用户自定义事件监听器和拦截器,以扩展其功能,例如实现数据校验、日志记录等。 10. **CGLIB和JPA支持**:Hibernate不仅支持标准的Java Persistence API(JPA),还通过...
Struts2提供了丰富的拦截器机制,可以方便地实现日志记录、权限控制、异常处理等功能。此外,它还支持OGNL(Object-Graph Navigation Language)表达式语言,使得在视图和模型之间的数据传递更为便捷。 **Hibernate...
Struts2还支持拦截器(Interceptors),可以方便地添加日志、事务管理等通用功能。 Spring框架则是一个全面的企业级应用框架,它不仅支持依赖注入(DI)和面向切面编程(AOP),还提供了大量的模块,如Spring MVC、...
综上所述,通过正确配置Hibernate的`hibernate.show_sql`、`hibernate.format_sql`以及日志框架的设置,我们可以得到不带问号的完整SQL输出,以辅助开发和调试工作。在实际项目中,可以参考上述步骤进行设置,确保你...
在本例中,AOP与日志拦截器结合,可以实现在方法执行前后自动插入日志记录,提高代码的可维护性和可读性。 3. Log4j:Log4j是Apache的一个开源项目,它是一个广泛使用的日志记录工具,提供灵活的日志记录配置,包括...
Struts2提供了强大的拦截器机制,可以方便地进行AOP(面向切面编程)操作,如日志记录、权限验证等。此外,它还支持多种结果类型和模板技术,如FreeMarker、JSP等,使得视图层的构建更加灵活。 2. Hibernate:...
12. 拦截器与事件(Interceptors and events) 12.1. 拦截器(Interceptors) 12.2. 事件系统(Event system) 12.3. Hibernate的声明式安全机制 13. 批量处理(Batch processing) 13.1. 批量插入(Batch inserts) ...
Struts2是一个强大的MVC框架,它提供了丰富的控制器组件和拦截器机制,可以处理HTTP请求并转发到相应的业务逻辑。Struts2的核心在于Action和Result,Action代表用户的一个操作,Result则是操作后的返回结果。此外,...