Задача по созданию из bean класса proxy и фабрики по созданию объектов - Java EE

312
31 июля 2017, 11:51

Есть задача.

Создайте способность объектов действовать как прокси вместо использования исходного поведения. Таким образом, для расширения таких функциональных возможностей реализация должна включать аннотацию для маркировки доступности класса для прокси-сервера и фабрики для получения объектов. Необходимые детали: Создайте аннотацию @Proxy. Аннотация может появляться на классах и объявляет, что класс владельца может стать прокси. Атрибуты: InvocationHandler - имя класса для использования в качестве обработчика Создайте фабричный класс. Класс используется для получения экземпляра объекта для класса, предоставленного как атрибут. Методы: GetInstanceOf (класс) - метод для получения объекта для указанного класса. Если класс имеет аннотацию @Proxy, то вместо обычного экземпляра следует использовать прокси-объект.

помогите разобраться в порядке выполнения, что за чем следует и как это должно правильно работать. Опыта мало, в голове очень плохо все складывается. Всем заранее спасибо. Буду рад любым примерам и наставлениям.

Для лучшего понимания смысла задания вот оригнал текста задачи:

0 голос «против» accept Оригинал текста задания.

Create an ability for objects to act as a proxy instead of using the original behaviour. Thus to extend such functionality an implementation should include an annotation to mark class availability to be proxy and a factory to obtain objects. Required details: Create a @Proxy annotation. The annotation may appear on classes and declares that a holder class can become proxy. Attributes: invocationHandler - a class name for using as handler Create a factory class. The class is used to get an object instance for a class provided as attribute.

Methods: getInstanceOf(Class) - a method to get an object for the specified class. If the class has the @Proxy annotation applied then a proxy object should be used instead of the common instance

Основные направления: создать фабрику, которая проверяет, есть ли на целевом классе аннотация @proxy, если есть, возвращает прокси-объект, иначе возвращает сам объект.

Answer 1

интерфейс

package by.tranning.ReflectionHomePartA.entities;
public interface Animals {
    void  voice();
}

класс прокси КОТ

package by.tranning.ReflectionHomePartA.entities;
import by.tranning.ReflectionHomePartA.annotations.Proxy;
@Proxy(invocationHandler = "tasks.reflections.annotation.handlers.ProxyAnnotationHandler")
public class Cat implements Animals {
    @Override
    public void voice() {
        System.out.println("Mrrr-mau");
    }

}

класс простых собак:

package by.tranning.ReflectionHomePartA.entities;
public class Dog implements Animals {
    @Override
    public void voice() {
        System.out.println("Grrr-gav");
    }

}

прокси класс выглядит так:

package by.tranning.ReflectionHomePartA.annotations;

import java.lang.annotation.*;
/**
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Proxy {
    String invocationHandler();
}

Далее фабрика:

package by.tranning.ReflectionHomePartA.factories;
import by.tranning.ReflectionHomePartA.entities.Animals;
public interface AnimalsCreator {
    Animals factoryMethod();
}

package by.tranning.ReflectionHomePartA.factories;

import by.tranning.ReflectionHomePartA.entities.Animals;
import by.tranning.ReflectionHomePartA.entities.Cat;

public class CatCreator  implements AnimalsCreator {
    @Override
    public Animals factoryMethod() {
        return new Cat();
    }


    }

package by.tranning.ReflectionHomePartA.factories;
import by.tranning.ReflectionHomePartA.entities.Animals;
import by.tranning.ReflectionHomePartA.entities.Dog;
public class DogCreator implements AnimalsCreator {
    @Override
    public Animals factoryMethod() {
        return new Dog();
    }
}

Ну и раннер

package by.tranning.ReflectionHomePartA.runner;
import by.tranning.ReflectionHomePartA.entities.Animals;
import by.tranning.ReflectionHomePartA.factories.AnimalsCreator;
import by.tranning.ReflectionHomePartA.factories.CatCreator;
import by.tranning.ReflectionHomePartA.factories.DogCreator;
public class Runner {
    public static void main(String[] args) {
        AnimalsCreator createAnimal = makeAnimalByName("dog");
        Animals animal = createAnimal.factoryMethod();
        animal.voice();
    }
    public static AnimalsCreator makeAnimalByName(String kindAnimal) {
        if (kindAnimal.equals("dog")) {
            return new DogCreator();
        }
        if (kindAnimal.equals("cat")) {
            return new CatCreator();
        }
        throw new RuntimeException("This kind of anmal deas not exsist" + kindAnimal);
    }
}

подскажите как теперь организовать фабрику, что бы она проверила по аннотации создается прокси объект или простой.

и как добавить сюда прокси?

READ ALSO
Как решить такую задачу? [требует правки]

Как решить такую задачу? [требует правки]

Дано: 10 человек (у каждого есть яблоко)Каждый из них может отдать другому это яблоко, а может и не отдать

254
Переключение между двумя фрагментами MainActivity с помощью BottomNavigationView

Переключение между двумя фрагментами MainActivity с помощью BottomNavigationView

На главном Activity есть BottomNavigationView и еще 2 layout файла фрагментовКак реализовать переключение между этими фрагментами, чтобы при этом оставался...

175
Как убрать подчеркивание?

Как убрать подчеркивание?

Добрый день! Я дико извиняюсь за следующий глупый вопрос, но факт остается фактом, впервые за много лет работы со стилем к моему большому стыду...

347
PHP Интернет магазин [требует правки]

PHP Интернет магазин [требует правки]

Хочу сделать интернет-магазинMVC желательно Laravel

190