1.Tomcat这款WEB服务器是很早之前开发的。我们写的StudentServlet类是今天写的。Tomcat负责构造我们写的StudentServlet类。
结论:在Tomcat中一定有一段在运行期根据我们写的Servlet类动态构造对象的代码【反射】
我们运行起idea来 写JAVA代码,写的过程中.触发一段获得当前类中属性、方法等信息的代码。【反射】
JDBC封装、Spring、MyBatis…
反射是JAVA语言提供的一套在运行期动态获得类中信息的API【Application Programming Interfaces 类库】。java.lang.reflect包
JAVA中四大类型: 类 接口 枚举 注解 都会生成.class文件 也可以使用反射解析。
通过反射我们可以在运行期动态的获得类中的属性、方法、构造方法等信息;通过反射我们可以在运行期动态的执行类中的方法;通过反射我们可以在运行期动态的构造类的对象;通过反射我们可以在运行期动态的判断对象的类型。
睡着的同学---》SleepStudent 桌子--》Table
水杯========》Cup 事务=====>Transaction
类==========》Class
Class类是描述类的类。一个Class类的对象代表一个具体的类。
当JVM加载完一个类之后,构造该类的任何对象之前,会首先在内存的堆区创建一个Class类型的对象,使用该对象存放JVM加载的类的信息。
xml/html文件====>
class文件=====》Class对象
Student stu = new Student();
3. ~~~
我们要获得类中信息,而在运行期类中信息都在Class对象中,所以我们需要首先获得Class对象。Class类没有公共的构造方法,Class类的对象是JVM加载类时自动构造的,所以外部不能new的。
一个类的对象可以有很多个,但是这些对象都指向一个Class对象。
所有基本数据类型和关键字void都有的Class对象
基本数据类型和对应的包装类不是一个Class对象。
所有具有相同元素类型和维数的数组都对应一个Class对象。
1.类名字.class 固定形式 Class c = Student.class
2.对象.getClass() stu.getClass()
3.类名字 Class cls = Class.forName(类名字)
forName
getName() /getSimpleName()
newInstance(): 使用无参构造方法构造对象。
内省 自省Introspector+PropertyDescriptor
比较方便的获得getter和setter
服务器启动:
请求到达:
jdk中提供了两种解析方案:
SAX:基于事件的解析方式,不需要把文档加载到内存。占资源少,只能解析一次
DOM:面向对象,把整个文档都加载到内存,占资源多,可以多次解析
DOM方式和SAX方式都有非常明显的优缺点,一般解析XML使用第三方=DOM4J(结合了DOM和SAX)