MentaContainer

Rev

Rev 52 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.mentacontainer.impl;

import java.lang.reflect.Method;

import org.mentacontainer.Component;
import org.mentacontainer.util.FindMethod;

public class GenericComponent implements Component {
       
        private final Object factory;
       
        private final Method method;
       
        public GenericComponent(Object factory, String methodName) {
               
                this.factory = factory;
               
                try {
               
                        this.method = FindMethod.getMethod(factory.getClass(), methodName, new Class[] { });
                       
                        this.method.setAccessible(true);
                       
                } catch(Exception e) {
                       
                        throw new RuntimeException(e);
                }
        }
       
        public <T> T getInstance()  {
               
                try {
                       
                        return (T) method.invoke(factory, (Object[]) null);
                       
                } catch(Exception e) {
                       
                        throw new RuntimeException("Cannot invoke method: " + method, e);
                       
                }
        }
}