martes, 6 de mayo de 2008

Reflexión e Introespección

Reflexión-->si partimos de la idea de que en java es un lenguaje orientado a objetos, se supone que los objetos son de una clase. Es decir que si tengo un objeto/variable miCoche que es de tipo Coche, pues entonces sabemos que es de la clase Coche. (ya sé que es evidente pero empezamos despacito...)
Pues bien el api de reflexión nos permite a través de la clase Class (ej: miCoche.getClass()) obtener información sobre los métodos y propiedades y anotaciones de dicha clase. A eso se refieren con introspección (se pregunta a si mismo). Pues como os comento, a través de la clase Class (Coche.class o miCoche.getClass()) podemos saber la "metainformación" de la clase en cuestión y por lo tanto de todos los objetos que tengamos de esa clase.
¿para qué sirve esto?...
pues hay situaciones en nuestro programa en tiempo de ejecución (es decir cuando el usuario lo utiliza/ejecuta) en las que nuestros objetos pueden recibir objetos de servicios externos, estos objetos quizá sean de la clase Object y entonces ¿qué hacemos o podemos hacer con un objeto de la clase Object?, pues podemos utilizar la reflexión para saber que propiedades tiene o simplemente que clase o que interfaces, o anotaciones, o metodos (creo que la info que te da es de tipo pública nunca private)....

Introespección-->definición de la palabra para que podamos entender mejor esto :"Observación interior de los propios actos o estados de ánimo o de conciencia".
Los javaBeans estan hechos para existir dentro de un Contenedor de Beans. Son clases Java. El contenedor puede ver las propiedades de un bean, pero cómo las ve?como vería las propiedades de un bean que has creado tú? pues lo que hace es "introspeccionar", "ver el interior" de la clase Bean para buscar los métodos y propiedades que lo conforman,por ejemplo si tienes los métodos getX y setX, el contenedor deducirá que hay una propiedad en el bean llamada X.

Aqui viene mas detallada:
http://www.javahispano.org/contenidos/es/introduccrion_al_api_reflection_reflexrion_de_ja/;jsessionid=8ACC346B5864053D9AC0C8CBBCA58062