关于反射的问题

JAVA的反射机制。
最近看了一下一些发行的库,比如objot等是说运行是没有反射。实现了ioc与aop,不再有反射。是什么原理哦?比如我要动态地调用某个类的某个方法,就只有方法名与类名,参数列表类型,不使用反射能完成吗?

关于反射,我真被搞晕了,什么时候才算是反射呢?
比如
Class A {
int field;
void method();
}

在操作A类时。
A a = new A();
//或者这里发生反射了吗? Class<?> c = a.getClass();
Class<?> c = A.class; //这里发生反射的操作了吗?
Method m = c.getDeclaredMethod("method",new Class[]{}); //这里应该发生了反射吧?
m.invoke(a); //这里还算是反射吗?

我有一个Method对象时,调用method的invoke方法还算是反射吗?
能详细说说这个吗?我老觉得我一用反射来做东西,就联想到它的性能比较差。想找代替品,又找不到更灵活的。唉。。

[code="java"]A a = new A();
Class<?> c = a.getClass(); [/code]
//getClass是Object的方法,返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:

Number n = 0;
Class<? extends Number> c = n.getClass();
一直都有的东西,谈不上叫反射

Class<?> c = A.class;
//这个也不算吧。。

[code="java"]Method m = c.getDeclaredMethod("method",new Class[]{});
m.invoke(a); [/code]

reflect的东西,在java.lang.reflect包里边,是这么描述的
[quote]提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对其底层对等项进行操作。

如果必需的 ReflectPermission 可用,则 AccessibleObject 允许抑制访问检查。

Array 提供动态创建和访问数组的静态方法。

此包中的类以及 java.lang.Class 可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,Object Serialization 和 JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。
[/quote]

可以参考api文档,更多技巧参考java reflection in action 这本书
反射的性能没有那么恐怖,像beanutils之类,strut1也是用了很多。
再看看那些动态语言,ruby python,n多这些东西,而且也比java慢n多。。
不过robbin他们还不是用得不亦乐呼。。

[quote]A a = new A();
//或者这里发生反射了吗? Class<?> c = a.getClass(); [/quote]
没有

[quote]Class<?> c = A.class; //这里发生反射的操作了吗? [/quote]
没有

[quote]Method m = c.getDeclaredMethod("method",new Class[]{}); //这里应该发生了反射吧? [/quote]
发生了

[quote]m.invoke(a); //这里还算是反射吗? [/quote]

当用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。

可以看看[url="http://www.blogjava.net/kingyaoo/archive/2008/06/07/206533.html"]java反射性能测试分析[/url]

反射理解就是非正常手段调用对象的方法或字段,所谓正常的手段就是平常的new一个对象,然后通过该实例进行方法或字段的调用。反射一般用在事先不太清楚某个实例的方法或字段的时候,可以通过名称的过滤或在恰当的时候来决定调用。

反射的性能也有些讨论
http://www.iteye.com/topic/12422

很多时候,用到反射,都是些框架级的东东,瓶颈也不一般不再这里。

[quote]第一次编解码某个类的对象时,会生成bytecode来访问这个类,后续编解码这个类的对象时,不再有任何reflection,优化了效率。 [/quote]

Objot是这么个说法吧