代码之家  ›  专栏  ›  技术社区  ›  niklassaers

实体方面(春季)

  •  4
  • niklassaers  · 技术社区  · 14 年前

    我在定义我的方面有点问题。我有很多实体想要分析get方法,所以我写了下面的切入点和方法

    @Pointcut("execution(* tld.myproject.data.entities.*.get*()")
    public void getEntityProperty() {}
    
    @Around("getEntityProperty()")
    public Object profileGetEntityProperty(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        String name = pjp.getSignature().getName();
        Object output = pjp.proceed();
        long elapsedTime = System.currentTimeMillis() - start;
        if(elapsedTime > 100)
            System.err.println("profileGetEntityProperty: Entity method " + name + " execution time: " + elapsedTime + " ms.");
        return output;
    }
    

    我已经在配置中打开了编织,并且编织到业务层的各个方面工作得很好。我的切入点写得正确吗?还是有什么东西使实体不可编织?(我的实体在类定义之前加上@entity前缀)

    干杯

    尼克

    3 回复  |  直到 7 年前
        1
  •  6
  •   Espen    7 年前

    实际上你只剩下一个圆括号了!

    < Buff行情>

    @pointcut(“Execution(*tld.myproject.data.entities. .get () ) ”)

    < /块引用>

    如果您使用Eclipse,我建议您使用AspectJ编译时编织进行开发。这是最简单的方法。

    使用AJDT插件,您会得到很多帮助!我刚刚粘贴了你的切入点,得到了一个编译错误。加了一个圆括号就行了!

    AJDT插件的视觉支持截图:

    gethello()方法左边的橙色箭头表示由around通知通知。请参见 here for a larger example.

    @切入点(“执行(*tld.myproject.data.entities. 得到 () ) “”


    如果您使用Eclipse,我建议您使用AspectJ编译时编织进行开发。这是最简单的方法。

    使用AJDT插件,您会得到很多帮助!我刚刚粘贴了你的切入点,得到了一个编译错误。加了一个圆括号就行了!

    AJDT插件的视觉支持截图:

    alt text

    gethello()方法左边的橙色箭头表示由around通知通知。见 here 举个更大的例子。

        2
  •  2
  •   Bozho Michał Mech    14 年前

    是的,有。实体由您创建,使用 new 运算符,因此它们不是Spring上下文的一部分。

    如果你想用这个,你需要启用交织(我更喜欢通过 <context:load-time-weaver/> ,并使用 @Configurable .

    我, 亲自 不喜欢这种做法。唉,没有什么比这更通用的了。如果持久性提供程序处于休眠状态,则可以创建实体的自定义代理。- see here 但这更尴尬。

        3
  •  0
  •   Mike Funk    14 年前

    只需注意@configurable与编译时编织一起工作。通过@configurable自动连接实体的缺点是,当通过hibernate从数据库中检索所述实体时,它们“似乎”不起作用。通过“新”调用,是的。但就在最近,考虑到一个来自实体的非常奇怪的持久性请求,使用“new”的单元测试工作得很好,但是Hibernate(或ehcache)加载的实体导致了自动连线属性的NPE。那是深夜,所以你可能想做些自我测试。:)只是在传递我最近的经历。希望它有帮助。