关于JFinal的一个问题

无聊的人们啊 发布于 2016/02/02 11:55
阅读 520
收藏 0

用Jfinal开发项目的时候习惯在Service中写static方法来提供服务,spring用注入service的方式提供服务。

这两种方式各自的优缺点是什么呢?有什么不一样的地方呢?@Jfinal

加载中
2
JFinal
JFinal

   spring 提供注入的方式主要目的是:

1:在运行时注入依赖,方便对注入的元素进行代理,从而实现AOP的功能,而AOP作为 OOP 的补充已然是必不可少的功能

2:方便单元测试,例如,可以很方便地注入 Mock 类去模拟真实的运行环境

3:实现 singlton

4:避免将依赖写死,方便未来切换依赖的实现类(在未来切换实现类大多数情况下是个伪需求)

    而 jfinal 抛弃了在 spring 时代为了实现 AOP 所使用的这些繁杂的概念:IOC、XML、Annotation、Aspect、Advice、Joinpoint、Poincut、Introduction、Weaving、Around,直指AOP的最核心的用法极速实现了 AOP功能。

    此外Serivce 建议设计成无状态、线程安全的,这样可以在做集群时只需要共享一个持久化库就可以方便地实现。所以可以在全局共享同一个业务对象,这样就可以在 Serivce 中通过 public static Service me = new Serivce() 避免在使用业务时每次都需要创建对象。

   最后纠正楼主的 serice 中使用 static 方法的做法,service 层通常需要使用AOP,所以并不建议将业务方法定义为 static 方法。

2
JFinal
JFinal

     最后再补充一些:在jfinal项目中业务层方法不要定义为static的,不利于做 aop,也不利于进行继承扩展业务功能。static 用于方法是比较倾向于面向过程语言的用法,一定程度上也是java 过于面象对象的一点点补充,所以非常适合用于在工具类中,如PathKit、PropKit、HashKit。

     的确有一些开发者图省事将业务层方法都弄成了 static,这个需要改变。

0
无聊的人们啊
无聊的人们啊

只知道static方法会一直存放在 内存中的方法块中

spring注入一般是用单例方式

运行起来应该是static会快一些?请大神们解答一下。

0
iehyou
iehyou
就我的理解  大部分service都是单例就可以解决,也不存在并发的问题 不需要那么多个set和get方法或者annotation,查找代码也不方便, 
0
0071
0071

之前整理过spring的优点,分享如下:

spring的主要特点就是IOC

优点如下:


  • 降低了组件之间的耦合度
  • 提高了开发效率和产品质量(由于降低了耦合度,不用担心其他模块对你的影响)
  • 统一标准,提高模块的复用性(模块完全是独立的,谁想用就可以直接用)
  • 模块具有热插拔效果(通IOC配置文件,可以决定对象之间的依赖关系)


0
0071
0071
Jfinal通过静态方法提供服务,感觉简单易懂,容易上手。
0
敌羞吾去脱他衣
敌羞吾去脱他衣

因为JFinal中不需要Service层,所以都是静态的?

Spring可能要在自身框架内做事务管理,注入比较方便管理。

返回顶部
顶部