Como instanciar objetos usando metodos de reflexão?

Pessoal minha duvida é a sequinte, como posso instanciar um objeto com base em um descritor(string) em tempo de execução? E como obter metadados da classe instanciada, como nome de atributos?
Abraço e t+

Este exemplo é para Java 5.0. Em Java 1.4 o exemplo é mais simples (removendo os <> e o “asSubclass”, e pondo alguns casts, deve funcionar).
Este é apenas o exemplo de instanciar uma classe pelo nome. Para obter os métodos, veja os métodos da classe java.lang.Class.

Suponha que você tenha várias classes que implementam a interface Componente:

package abc.xyz;
interface Componente &#123;
    int executa &#40;int parametro&#41;;
&#125;
....
package abc.xyz;
class Classe1 implements Componente &#123;
    public int executa &#40;int parametro&#41; &#123;
        return parametro + 1;
    &#125;
&#125;
....
package abc.xyz;
class Classe2 implements Componente &#123;
    public int executa &#40;int parametro&#41; &#123;
        return parametro - 2;
    &#125;
&#125;

e você queira instanciar a classe abc.xyz.Classe1 pelo seu nome. Você deve fazer:

package abc.xyz;
class TestComponente &#123;
    public static void main&#40;String&#91;&#93; args&#41; throws Exception &#123;
        Class&lt;? extends Componente&gt; cl = Class.forName &#40;&quot;abc.xyz.Classe1&quot;&#41;.asSubclass&#40;Componente.class&#41;;
        Componente comp = cl.newInstance&#40;&#41;;
        System.out.println &#40;comp.executa&#40;2&#41;&#41;; // deve imprimir 3
        cl = Class.forName &#40;&quot;abc.xyz.Classe2&quot;&#41;.asSubclass&#40;Componente.class&#41;;
        comp = cl.newInstance&#40;&#41;;
        System.out.println &#40;comp.executa&#40;2&#41;&#41;; // deve imprimir 0
    &#125;
&#125;

considero que o padrão factory seja a maneira mais indicade de se fazer isso:
http://www.guj.com.br/articles/137