pojo类继承pojo类_如何编写更好的POJO服务

本文探讨了如何编写和管理POJO服务,包括服务的生命周期、基础POJO服务的定义、容器管理多个POJO服务的方式,以及如何在Spring框架和JEE应用服务器中运行这些服务。强调了服务生命周期的重要性,防止资源泄漏。
摘要由CSDN通过智能技术生成

pojo类继承pojo类

在Java中,您可以轻松地在Plain Old Java Object(POJO)类中实现一些业务逻辑,并且可以在高级服务器或框架中轻松运行它们。 有许多服务器/框架,例如JBossAS,Spring或Camel等,它们使您可以部署POJO甚至不对其API进行硬编码。 显然,如果愿意耦合到它们的API细节,您将获得高级功能,但是即使您这样做,也可以通过将自己的POJO和他们的API封装在包装器中来使这些特性降至最低。 通过编写和设计尽可能简单的POJO自己的应用程序,您将拥有最灵活的方式来选择框架或服务器来部署和运行您的应用程序。 在这些环境中编写业务逻辑的一种有效方法是使用 服务组件。 在本文中,我将分享在编写 Services方面学到的一些知识。

什么是服务?

如今,“ 服务 ”一词已被过度使用,对不同的人可能意味着很多事情。 当我说Service时 ,我的定义是一个具有最小生命周期(例如initstartstopdestroy )的软件组件。 在编写的每个服务中,您可能不需要生命周期的所有这些阶段,但是您可以简单地忽略那些不适用的服务。 在编写旨在长期运行的大型应用程序(例如服务器组件)时,定义这些生命周期并确保按正确的顺序执行它们是至关重要的!

我将带领您完成我准备的Java演示项目。 这是非常基础的,应该独立运行。 它具有的唯一依赖性是SLF4J记录器。 如果您不知道如何使用记录器,则只需将它们替换为System.out.println 。 但是,我强烈建议您学习在应用程序开发期间如何有效使用记录器。 另外,如果您想尝试与Spring相关的演示,那么显然您也将需要其jar。

编写基本的POJO服务

您可以在界面中如下所示快速定义具有生命周期的服务合同。

package servicedemo;

public interface Service {
    void init();
    void start();
    void stop();
    void destroy();
    boolean isInited();
    boolean isStarted();
}

开发人员可以自由地在Service实现中做他们想做的事情,但是您可能想给他们一个适配器类,这样他们就不必在每个Service上重写相同的基本逻辑。 我将提供这样的抽象服务:

package servicedemo;

import java.util.concurrent.atomic.*;
import org.slf4j.*;
public abstract class AbstractService implements Service {
    protected Logger logger = LoggerFactory.getLogger(getClass());
    protected AtomicBoolean started = new AtomicBoolean(false);
    protected AtomicBoolean inited = new AtomicBoolean(false);

    public void init() {
        if (!inited.get()) {
            initService();
            inited.set(true);
            logger.debug('{} initialized.', this);
        }
    }

    public void start() {
        // Init service if it has not done so.
        if (!inited.get()) {
            init();
        }
        // Start service now.
        if (!started.get()) {
            startService();
            started.set(true);
            logger.debug('{} started.', this);
        }
    }

    public void stop() {
        if (started.get()) {
            stopService();
            started.set(false);
            logger.debug('{} stopped.', this);
        }
    }

    public void destroy() {
        // Stop service if it is still running.
        if (started.get()) {
            stop();
        }
        // Destroy service now.
        if (inited.get()) {
            destroyService();
            inited.set(false);
            logger.debug('{} destroyed.', this);
        }
    }

    public boolean isStarted() {
        return started.get();
    }

    public boolean isInited() {
        return inited.get();
    }

    @Override
    public String toString() {
            return getClass().getSimpleName() + '[id=' + System.identityHashCode(this) &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值