AspectJ:访问私有字段?

问题描述 投票:5回答:1

我想使用一个方面来为一个私有id字段添加getter和setter。我知道如何通过一个 aspect 添加一个方法,但我如何访问私有 id 字段?

我认为我只需要让 aspect 成为 provileged。我尝试了下面的代码,但是aspect不能访问id字段。

public privileged aspect MyAspect {

public String Item.getId(){

    return this.id;
}

一个可能的办法是像这篇博文中所示的用户反射。http:/blog.m1key.me201105aop-aspectj-field-access-toinejct.html。

反射是唯一的可能还是有办法用AspectJ来做?

java aop aspectj
1个回答
8
投票

你确定不能吗?我刚刚测试了一下,它运行了。这是我的完整代码。

package com.example;

public class ClassWithPrivate {
    private String s = "myStr";
}

==========

package com.example.aspect;

import com.example.ClassWithPrivate;

privileged public aspect AccessPrivate {

    public String ClassWithPrivate.getS() {
        return this.s;
    }

    public void ClassWithPrivate.setS(String str) {
        this.s = str;
    }
}

==========

package com.example;

public class TestPrivate {

    public static void main(String[] args) {

        ClassWithPrivate test = new ClassWithPrivate();
        System.out.println(test.getS());
        test.setS("hello");
        System.out.println(test.getS());
    }
}

如果出于某种原因,这对你不起作用,你可以使用反射,或其他方法,如这里描述的。https:/web.archive.orgweb20161215045930http:/blogs.vmware.comvfabric201204using-aspectj-for-accessing-private-members-without-reflection.html。然而,根据基准,它可能不值得。

© www.soinside.com 2019 - 2024. All rights reserved.