Генерировать код во время компиляции с Java? - PullRequest
1 голос
/ 24 марта 2011

Я создал набор классов, представляющих ресурсы RESTful, и другие вспомогательные функции, которые фактически выполняют HTTP-запросы для извлечения и построения объектов.Мои классы выглядят так:

class MyResource{
    Attribute id = new Attribute(this, long);
    Attribute name = new Attribute(this, String);
    /* etc */
}

Теперь случается так, что я хотел бы использовать классы POJO для подключения к фреймворку, который любит работать с POJO.

Я хотел быесть прокси, которые будут выглядеть следующим образом:

class MyResourceProxy{
    private MyResource realResource;

    public MyResourceProxy(MyResource o){realResource = o;}

    public long getId(){
        return realResource.id.get();
    }

    public void setId(long value){
        realResource.id.set(value);
    }

    public String getName(){
        return realResource.name.get();
    }

    public void setName(String value){
        realResource.name.set(value);
    }        
}

Я не хочу поддерживать код для этих прокси-классов, а только мастер-классы типа ресурса.

Iизучил самоанализ и нашел подсказку о том, как генерировать указанный прокси-код по требованию.Вопрос заключается в следующем: возможно ли сгенерировать код во время компиляции, а затем скомпилировать его вместе с библиотекой?Может быть, я повернул не туда и делаю что-то неинтересное;)

Что вы думаете?Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Это зависит от того, что вы строите систему, если вы имеете в виду javac, то я бы сказал, нет, но если вы используете ant или maven, то вы можете.

Существует множество примеров генераторов кода.

В вашем случае я бы использовал отражение в скомпилированном классе MyResource. Я хотел бы рассмотреть возможность использования Velocity в качестве шаблона класса. Это может быть излишним в вашем случае, но когда вы генерируете больше кода, это может быть полезно.

1 голос
/ 24 марта 2011

Вы пытались использовать внедрение зависимостей для генерации ваших классов при создании экземпляра?

Базовый пример для DI

...