2012-09-24 52 views
0

我们有以下的域类继承策略。使用beforeUpdate更改属性对扩展类似乎没有影响?

  • AbstractDomain(containts默认属性)
  • 用户扩展AbstractDomain
  • 运营商延伸用户

在AbstractDomain我们已经取得的方法来实现 更新前和beforeInsert使用方法,所以我们是否可以extends这些对 扩展类

AbsrtractDomain

abstract class AbstractDomain { 
    protected void onBeforeInsert() { 
    ... 
    } 

    protected void onBeforeUpdate() { 
    ... 
    } 

    def beforeInsert() { 
     onBeforeInsert() 
    } 

    def beforeUpdate() { 
     onBeforeUpdate() 
    } 
} 

在用户类,我们有逻辑加密用户密码这样的..

用户

public class User extends AbstractDomain { 
    @Override 
    protected void onBeforeUpdate() { 
     super.onBeforeUpdate() 
     if (isDirty('password')) { 
      encodePassword() 
     } 
    } 

    protected void encodePassword() { 
     println "encoding password!!!!" 
     if (springSecurityService) { // added the if clause to ensure 
that tests work correct! 
      password = springSecurityService.encodePassword(password) 
     } 
    } 
} 

操作

public class Operator extends User { 
// code omitted 
} 

因此,当我尝试更新一个操作员,看到消息“编码 密码!!!!”该物业已设置,但是当我检查数据库 密码仍然是明文。 我所做的更改似乎没有效果,似乎不会被持续。

任何线索我可能会失踪?

+0

嗨比尔,你完全钉住了!我犯了在AbstractDomain类和User类中使用'def springSecurityService'的错误。所以User类中的那个是null!请提供答案,以便我可以接受你回答:) – Marco

回答

0

查看代码...如果您看到“编码密码!!!”文本,但密码未编码,则springSecurityService属性未设置,或者encodePassword函数未能正常工作......这与继承无关。我会把你的println移到if里面,因为那样更准确。

相关问题