4
回答
jfinal实例对象问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

jfinal在实体类都是使用

public final class 对象extends Model<对象> {

public final static 对象 dao = new 对象();


会不会影响性能或者引发问题?

比如Service的里面公共属性也这样写


    public static final OAuthService impl=new OAuthService();

然后方法体就

public OAuthClient getOAuthClientByClientId(String clientId){
        return OAuthDAO.impl.findOAuthClientByClientId(clientId);
    }

这样免new对象了,因为DAO和Service很少修改属性值,只是调用方法传参而已,会引发问题吗?

举报
bing_chuan
发帖于5年前 4回/1K+阅
共有4个答案 最后回答: 5年前

    在Model中创建的dao对象,只要是用于查询就没有问题,因为查询是线程安全的。这种用法是为了在查询时不用创建对象,对性能提升会有帮助,不用每次创建对象才能再查询。

    如果Model中的dao对象用于承载数据就会有问题,因为这个dao是static的,所以是全局共享的。这点在JFinal手册中有很明确地说明

我使用JFinal不久,发表一下个人见解。楼主完全可以这样用,没有问题的。即使new对象开销也不大。根据JFinal的特性,我觉得更适合富血模型。 @JFinal  解答下呗。

引用来自“JFinal”的答案

    在Model中创建的dao对象,只要是用于查询就没有问题,因为查询是线程安全的。这种用法是为了在查询时不用创建对象,对性能提升会有帮助,不用每次创建对象才能再查询。

    如果Model中的dao对象用于承载数据就会有问题,因为这个dao是static的,所以是全局共享的。这点在JFinal手册中有很明确地说明

也就是说以下两种方式都有线程安全问题?

1.
  A a = A.dao.findById('212');
  a.set(xxx);
2.
 A a = getModel(A.class)
 a.set(xxx)
@JFinal

--- 共有 4 条评论 ---
JFinal回复 @缪斯的情人 : 看漏了,a.set(xxx)有线程安全问题,A.dao.findById(...)没问题 5年前 回复
缪斯的情人回复 @JFinal : saodai!A.dao.set()这样肯定有问题了 5年前 回复
JFinal回复 @缪斯的情人 : 第一种也没问题,也是创建的新对象 5年前 回复
缪斯的情人第2种,看了下没问题,getModel实例化了一个新对象 5年前 回复

引用来自“JFinal”的答案

    在Model中创建的dao对象,只要是用于查询就没有问题,因为查询是线程安全的。这种用法是为了在查询时不用创建对象,对性能提升会有帮助,不用每次创建对象才能再查询。

    如果Model中的dao对象用于承载数据就会有问题,因为这个dao是static的,所以是全局共享的。这点在JFinal手册中有很明确地说明

按理静态属性是final修饰的,承载数据意思是在java里面等于给对象属性设置值有问题对吗?final特性只能被修改一次值。

所以DAO层 Service(业务) 层都采用类似public static final 对象 impl=new 对象();

都是安全对嘛?因为我只要调用方法体不涉及修改对象数据。

顶部