服务(Service)

类似SpringBeanServiceflying中最重要的组成部分,是它负责完成所有可用的业务处理。服务可以是单例,也可以是每次创建新实例,通过配置标明。

本框架都是以服务为中心建立的,建设服务、面向前端(如ajax)暴露服务、面向其他系统提供服务。

服务的开发

类似Spring,无需继承框架中的任何类或者实现任何接口。

服务的注册

类似Spring,提供两种注册方式

①使用注解,示例:

@Service("UserService")

public class UserService { doSomething }

②使用配置文件

<service id="CategoryService" type="class">

<target>com.flying.cms.service.CategoryService</target>

</service>

 

服务的参数

虽然服务的参数可以不做任何处理,类似int age这样,但是我们还是建议加上Param注解,通过Param注解,可以处理一下事件:

1、增加有效性说明,如requiredmaxmin

2、增加远程调用的方便性(参考后续远程服务调用RMI等文章)

3、便于前端(ajax等)的服务调用

 

服务的运行过程

服务的运行包括两部分,服务体和注解处理。一些业务仅通过注解既可以完成,如前面看到的Dao一样;一些业务需要通过一些列的注解完成或者服务体完成,如:

@RemoveCache(tag="pas.Menu")

@DaoCreate(entity="security.menu")

public Data create(

@Param(value="name", required=true)String name,

@Param(value="url",required=true)String url,

@Param(value="remarks",required=true)String remarks,

@Param(value="perm_id",required=true)long perm_id,

@Param(value="sort_id",required=true)long sort_id,

@Param(value="parent_id",required=true)long parent_id) throws Exception {

return null;

}

创建一个菜单对象,并删除缓存中的内容

@Transaction

public Data createWithPerms(

@Param(value="name", required=true)String name,

@Param(value="remarks",required=true)String remarks,

@Param(value="perm_ids",required=true)long[] perm_ids) throws Exception {

Data d = this.create(name, remarks);

long role_id = d.getLong("role_id", 0);

if(perm_ids != null)

for(long perm_id: perm_ids) {

this.addPermToRole(role_id, perm_id);

}

return new Data(Codes.CODE, Codes.SUCCESS);

}

在事务中,服务体执行一系列的动作

运行原理

系统在执行过程中,根据注解和服务体,生成一个责任链,一次从最外面的注解开始执行,直到最里层的服务体。通过注解协助服务完成业务处理工作,能够极大的提升代码服务和简化切面编程。

当前系统中提供的注解包括:

数据库操作相关的:DaoCreateDaoUpdateDaoRemoveDaoQueryTransaction

缓存相关的:UseCacheRemoveCacheLevel2Cache

日志相关的:DefaultServiceInvokeAnnotation,MethodLogger

安全相关的:MethodAuthentication

还可以开发任意定制的服务注解,详细参考后续注解相关文章。

框架源码:https://github.com/hifong/flying

Demo应用:https://github.com/hifong/pas

技术QQ群:455852142

原文地址:https://www.cnblogs.com/hifong/p/5433074.html