Because Meta Programming must be easy.

Extension

Now that you know your way around Mirror, maybe you want something more.

Reflection Providers

Basically, all dirty work is handled by a collection of interfaces we call Reflection Providers. These are the real Mirror's core. Today we only have net.vidageek.mirror.provider.java.PureJavaReflectionProvider, that uses only Java Reflection API. But you can just implement your own net.vidageek.mirror.provider.ReflectionProvider to give you more control over what's happening. Actually, net.vidageek.mirror.provider.ReflectionProvider is just a wrapper for more specific interfaces: But how do you make Mirror use your Reflection Provider? Take a look at Extension -> Configuration.

Sun Reflection Provider

There is an implementation of ReflectionProvider that relies on some Sun internal classes to speedup reflection by bypassing security checks. This provider may be 25% faster than the default provider depending on how you're using mirror. Warning!!! This will probably only work on Sun JVM 1.5 and 1.6. There are two ways to use it:
new Mirror(new Sun15ReflectionProvider());
or add the following line to your mirror.properties:
provider.class = net.vidageek.mirror.provider.sun15.Sun15ReflectionProvider

Configuration

There are two ways to configure Mirror. You can instantiate Mirror passing a net.vidageek.mirror.provider.ReflectionProvider :
new Mirror(new FakeReflectionProvider());
Or you can let Mirror read a property file (mirror.properties) located at your project root folder. For now, this configuration file will use only the following key: An example:
provider.class = net.vidageek.mirror.fake.FakeProvider
Just to remember, no configuration is needed to use Mirror. It will work just fine without it. Use it only if fine is not enough for your needs.