0 / 0 / 1
Регистрация: 12.06.2017
Сообщений: 36
1

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

30.07.2017, 13:15. Показов 2218. Ответов 2

Author24 — интернет-сервис помощи студентам
Есть задача.

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

помогите разобраться в порядке выполнения, что за чем следует и как это должно правильно работать. Опыта мало, в голове очень плохо все складывается. Всем заранее спасибо.
Буду рад любым примерам и наставлениям.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2017, 13:15
Ответы с готовыми решениями:

Создание фабрики по созданию объектов
Здорова! Тут вычитал, что создание объектов лучше поручать отдельному классу который называют...

Оптимизация кода по созданию объектов
Помогите с оптимизацией создания объектов из префаба. Как можно сжать данный код? есть массив с...

Нужна информация по созданию 3D объектов
На сколько я знаю на WPF можно рисовать 3D объекты, покажите пожалуйста какие-нибудь примеры, ну...

Макрос для XLS по созданию объектов в Visio
Добрый день! Помогите пожалуйста с шаблоном макроса для XLS, который бы создавал новый файл Visio,...

2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.07.2017, 15:28 2
создаешь фабрику, которая проверяет, есть ли на целевом классе аннотация @proxy, если есть, возвращает прокси-объект, иначе возвращает сам объект. Однако, т.к. текст задачи, судя по всему, переведен малограмотным узбеком с китайского, детали понятны не до конца.
0
0 / 0 / 1
Регистрация: 12.06.2017
Сообщений: 36
30.07.2017, 19:27  [ТС] 3
Лучший ответ Сообщение было отмечено Sergei727 как решение

Решение

Для точности тогда вот еще оригинал:


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

Добавлено через 1 час 12 минут
создаю фабричный получаю переопределенный метод от наследованного абстрактного класса. но как только сохраняю IDE начинает ругаться (The method factoryMethod() of type DogCreator must override or implement a supertype method) и предлагает удалить аннотацию:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package by.tranning.ReflectionHomePartA.factories;
 
import by.tranning.ReflectionHomePartA.entities.Animal;
import by.tranning.ReflectionHomePartA.entities.Dog;
 
 
public class DogCreator  extends Creator {
 
    @Override
    public Animal factoryMethod() {
        // TODO Auto-generated method stub
        return new Dog();
    }
 
    
        
    }
А в return на конструrтор new Dog() пишет (Type mismatch: cannot convert from Dog to Animal) что это несоответствие типов почему?

Класс Dog:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package by.tranning.ReflectionHomePartA.entities;
 
public class Dog {
    public Dog(){};
    public Dog( String name, String woolColor, String eyeColor, int age, int toothQuantity, boolean homeless){
        
        this.name = name;
        this.woolColor = woolColor;
        this.eyeColor = eyeColor;
        this.age = age;
        this.toothQuantity = toothQuantity;
        this.homeless = homeless;
        
    }
        
        private String name;
        private String woolColor;
        private String eyeColor;
        private int age;
        private int toothQuantity;
        private boolean homeless;
        
        
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }   
        public String getWoolColor() {
            return woolColor;
        }
        public void setWoolColor(String woolColor) {
            this.woolColor = woolColor;
        }
        public String getEyeColor() {
            return eyeColor;
        }
        public void setEyeColor(String eyeColor) {
            this.eyeColor = eyeColor;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public int getToothQuantity() {
            return toothQuantity;
        }
        public void setToothQuantity(int toothQuantity) {
            this.toothQuantity = toothQuantity;
        }
        public boolean isHomeless() {
            return homeless;
        }
        public void setHomeless(boolean homeless) {
            this.homeless = homeless;
        }
        
        
        
 
    }
Класс Animal

Java
1
2
3
4
5
6
package by.tranning.ReflectionHomePartA.entities;
 
public abstract class Animal {
    
 
}
Добавлено через 47 минут
В классе Dog не указал наследника Animal, теперь уже не ругается.

Добавлено через 1 час 30 минут
Немного все переделал:
интерфейс
Java
1
2
3
4
5
package by.tranning.ReflectionHomePartA.entities;
 
public interface Animals {
    void  voice();
}
класс прокси КОТ
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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");
        
    }
    
 
}
класс простых собак:
Java
1
2
3
4
5
6
7
8
9
10
11
12
package by.tranning.ReflectionHomePartA.entities;
 
public class Dog implements Animals {
 
    @Override
    public void voice() {
        System.out.println("Grrr-gav");
        
    }
    
 
}
прокси класс выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package by.tranning.ReflectionHomePartA.annotations;
 
 
import java.lang.annotation.*;
 
/**
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Proxy {
    String invocationHandler();
}

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

Java
1
2
3
4
5
6
7
8
9
package by.tranning.ReflectionHomePartA.factories;
 
import by.tranning.ReflectionHomePartA.entities.Animals;
 
public interface AnimalsCreator {
 
    Animals factoryMethod();
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
    }
 
    
    
        
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
    }
 
}
Ну и раннер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);
    }
}
Добавлено через 13 минут
подскажите как теперь организовать фабрику, что бы она проверила по аннотации создается прокси объект или простой.

Добавлено через 1 минуту
и как добавить сюда прокси?
0
30.07.2017, 19:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2017, 19:27
Помогаю со студенческими работами здесь

Вопрос по созданию класса
Подскажите пожалуйста, хотя бы в общих чертах. Мне необходи создать класс, в который входил бы...

Вопрос по созданию класса
По заданию нужно создать класс пушки. Делаю по образцам, но что-то не выходит. Пока что накидал вот...

Задание по созданию класса LinkedListVector
Описать класс «список» с именем «LinkedListVector», содержащий массив элементов вещественного...

Задание по созданию класса HugeInteger
Нужно создать класс HugeInteger, который будет вмещать до 40 цифр в своей записи. Затем задание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru