Byte Buddy - реализация метода.Context.Default не является свойством bean-компонента - создание установщика

Как создать установщик поля с помощью byte buddy? Каков рекомендуемый синтаксис?

Мне удалось создать геттер из поля (мой исходный вопрос здесь), но использование defineMethod для создания установщика вызывает исключение Method Implementation.Context.Default ... is no bean property.

Предлагаемый способ создания установщика в этом вопросе кажется быть устаревшим.

Вот мой ошибочный код, использующий версию 1.5.4 byte-buddy:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException {
        Class<?> type = new ByteBuddy()
                .subclass(Object.class)
                .name("domain")
                .defineField("id", int.class, Visibility.PRIVATE)               
                .defineMethod("getId", int.class, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty())
                .defineMethod("setId", Void.TYPE, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty())              
                .make()
                .load(sample.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
                .getLoaded();

        Object o = type.newInstance();
        Field f = o.getClass().getDeclaredField("id");
        f.setAccessible(true);
        System.out.println(o.toString());       
        Method m = o.getClass().getDeclaredMethod("getId");
        System.out.println(m.getName());
        Method s = o.getClass().getDeclaredMethod("setId", int.class);
        System.out.println(s.getName());
    }

person Sander_M    schedule 19.11.2016    source источник


Ответы (1)


Вы не определили параметр для сеттера. Поэтому Byte Buddy не понимает, как реализовать этот метод. Вам необходимо установить withParameters(int.class) при определении метода setId.

person Rafael Winterhalter    schedule 20.11.2016