Как создать объект из пути / имени класса с помощью Spring Framework? - PullRequest
0 голосов
/ 15 января 2012

У меня есть объект 'Foo Action', который имеет тип FooProcess (interface) [null object]. Я хочу инициализировать 'Foo Action' как объект подкласса [FooOne или FooTwo] из FooProcess.

Используя Spring Framework, я могу создать ArrayList FooList (список имен подклассов FooProcess), теперь я хотел бы инициализировать FooAction как один из подклассов. (Учитывая параметр selected, чтобы определить, какой класс я хочу инициализировать как)

Все подклассы FooProcess имеют конструктор, который принимает String.

Моя проблема именно в этой строке

    FooAction = component.getClass().getConstructor(f);

Полный метод:

public FooProcess Load(String selected, String f) throws ClassCastException, InstantiationException, IllegalAccessException, ClassNotFoundException{
    ArrayList<String> FooList = new ArrayList<String>();
    final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
    provider.addIncludeFilter(new AssignableTypeFilter(FooProcess.class));
    for (BeanDefinition component : provider.findCandidateComponents("org.project.foomodule.systems")) {
        if(selected == component.getBeanClassName()){
        FooAction = component.getClass().getConstructor(f);
    } }
    return FooAction;
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Я вижу одну проблему: вы вызываете getClass () для BeanDefinition, который будет самим классом BeanDefinition, а не классом определенного Bean.

Кроме того, вы не должны сравнивать строки с == в Java. Вместо этого используйте .equals ().

0 голосов
/ 15 января 2012

Посмотрите на это, он работает так же

import java.awt.Rectangle;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class SampleInstance {

    public static void main(String[] args) {

        Rectangle rectangle;
        Class rectangleDefinition;
        Class[] intArgsClass = new Class[] { int.class, int.class };
        Integer height = new Integer(12);
        Integer width = new Integer(34);
        Object[] intArgs = new Object[] { height, width };
        Constructor intArgsConstructor;

        try {
            rectangleDefinition = Class.forName("java.awt.Rectangle");
            intArgsConstructor = rectangleDefinition
                    .getConstructor(intArgsClass);
            rectangle = (Rectangle) createObject(intArgsConstructor, intArgs);
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        } catch (NoSuchMethodException e) {
            System.out.println(e);
        }
    }

    public static Object createObject(Constructor constructor,
            Object[] arguments) {

        System.out.println("Constructor: " + constructor.toString());
        Object object = null;

        try {
            object = constructor.newInstance(arguments);
            System.out.println("Object: " + object.toString());
            return object;
        } catch (InstantiationException e) {
            System.out.println(e);
        } catch (IllegalAccessException e) {
            System.out.println(e);
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        } catch (InvocationTargetException e) {
            System.out.println(e);
        }
        return object;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...