• Liferay7 BPM门户开发之22: Liferay7模型监听器(Model Listeners


    参考:https://www.cnblogs.com/starcrm/p/6047323.html

    Liferay7 BPM门户开发之22: Liferay7模型监听器(Model Listeners)

    注意:先温习一下AOP的概念,即Aspect Oriented Program,面向切面编程。 使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。 从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等 ,下边的内容很像...

    Model Listeners实现ModelListener接口,用于持久化时的AOP处理

    一些使用场景:

    • Audit Listener: 在一个独立而分离的数据库,做信息更新的审计;
    • Cache Clearing Listener: 缓存清除时做的额外定制处理;
    • Validation Listener: 实体的验证
    • Entity Update Listener: 实体的更新处理

    在一个实体模型上可以有多个侦听器,并且无法控制他们运行的顺序。

    Liferay7中你只需要处理2件事情,比6.2要简单:

    • 1、实现 ModelListener
    • 2、在Liferay’s OSGi运行时自动注册服务


    在Liferay7中的写法:

    复制代码
    package ...;
    
    import ...;
    
    @Component(
        immediate = true,
        service = ModelListener.class
    )
    public class CustomEntityListener extends BaseModelListener<CustomEntity> {
    
        /* Override one or more methods from the ModelListener 
            interface.
        */
        @Override
        public void onAfterCreate(CustomEntity entity) throws ModelListenerException {
            ...
        }
    }
    复制代码

    在Liferay7中不用编写docroot/WEB-INF/liferay-hook.xml,增加<portal-properties>portal.properties</portal-properties>,方便很多

    在Liferay6中的写法:

    复制代码
    package com.liferay.samples.hooks;
    
    import com.liferay.portal.ModelListenerException;
    import com.liferay.portal.model.BaseModelListener;
    import com.liferay.portal.model.User;
    
    public class MyUserListener extends BaseModelListener<User> {
    
    @Override
    public void onAfterCreate(User user) throws ModelListenerException {
      System.out.println(user.getFullName());
    }
    
    public void onAfterUpdate(User user) throws ModelListenerException {
      System.out.println(user.getFullName());
    }
    }
    复制代码


    CustomEntity用于告诉监听器,实体模型的类型。

    注册Liferay’s OSGi runtime:

    @Component(
    immediate = true,
    service = ModelListener.class
    )

    可以实现的模型事件:

    • onAfterAddAssociation: 处理关联模型的AfterAdd
    • onAfterCreate: 在模型的DAO持久化类中Cearte事件之后,做些你的业务逻辑
    • onAfterRemove: 在模型的DAO持久化类中Remove事件之后,做些你的业务逻辑
    • onAfterRemoveAssociation: 处理关联模型的AfterRemove
    • onAfterUpdate: 在模型的DAO持久化类中Update事件之后,做些你的业务逻辑
    • onBeforeAddAssociation:
    • onBeforeCreate:
    • onBeforeRemove:
    • onBeforeRemoveAssociation:
    • onBeforeUpdate:

    如果你熟悉Spring的AOP,是不是有种似曾相识的感觉,这就是Liferay7方式的AOP,好处是可以和之前的旧业务处理代码解耦(你可以做一个新的独立的ModelListener工程)
    而不是在DAO持久化类或Service中去添加业务代码。
    Hook钩子的其中实现方法之一就是基于Model Listeners

  • 相关阅读:
    复杂系统架构设计<1>
    DevExpress Applications<3>
    DevExpress Skins<2>
    DevExpress MVVM<1>
    Unity容器<1>
    spring cloud微服务快速教程之(九) Spring Cloud Alibaba--sentinel-限流、熔断降级
    spring cloud微服务快速教程之(八) Spring Cloud Alibaba--nacos(二)、配置中心
    spring cloud微服务快速教程之(七) Spring Cloud Alibaba--nacos(一)、服务注册发现
    小白的springboot之路(十五)、mybatis的PageHelper分页插件使用
    spring cloud微服务快速教程之(六) 应用监控 spring boot admin
  • 原文地址:https://www.cnblogs.com/show58/p/13808030.html
Copyright © 2020-2023  润新知