1.什么是反射?
反射是在运行状态中,JVM会创建一个该类的Class类对象,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
2.什么是Java序列化?什么情况需要Java序列化?
java序列化时是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
以下情况需要使用Java序列化
想把内存中的对象状态保存在一个文件或者数据库中的时候;
想用套接字在网络上传送对象的时候
想通过RMI(远程方法调用)传输对象的时候。
3.代理模式?
代理是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础行,增强额外的功能操作,即扩展目标的功能。
3.1静态代理:
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者继承相同的父类。
/** * 代理对象,静态代理 */ public class UserDaoProxy implements IUserDao{ //接收保存目标对象 private IUserDao target; public UserDaoProxy(IUserDao target){ this.target=target; } public void save() { System.out.println("开始事务..."); target.save();//执行目标对象的方法 System.out.println("提交事务..."); } }
总结:静态代理可以做到不修改目标对象的功能前提下,对目标功能扩展。
缺点: 因为代理对象需要与目标镀锡实现一样的接口,所以会有许多代理类,类太多,一旦接口增加方法,目标对象与代理对象都要维护
3.2动态代理
动态代理有一下特点:(1)代理对象,不需要实现接口(2)代理对象的生成使用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象、目标对象实现的接口的类型) 3.动态代理也叫:JDK代理/接口代理
JDK中生成代理对象的API:
代理类所在包:java.lang.reflect.Proxy
JDK实现代理只需要使用newProxyInstance方法,但是该方法需要接收三个参数的完整写法:
static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvovationHandler h)
指定当前目标对象使用类加载器,获取加载器的方法是固定的
目标对象实现的接口的类型,使用泛型方式确认类型
InvocationHandler h:事件处理,执行目标对象的方法时,会触发时间处理器的方法,会把当前执行目标对象的方法作为参数传入
目标对象一定要实现接口
3.3Cglib代理
4.简单说一下springmvc运行流程?
Springmvc先将请求发送给DispatcherServlet
DispatcherServlet查询一个或者多个HandlerMapping,找到请求的Controller
DispatcherServlet再把请求提交到对应的Controller
Controller进行业务逻辑处理后,会返回一个ModelAndView
Dispathcher查询一个或者多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象。
视图对象负责渲染返回给客户端
5.springmvc有哪些组件?
前置控制器DispatcherServlet
映射控制器HandlerMapping
处理器Controller
模型和视图ModelAndView
视图解析器ViewResolver
6.@RequestMapping的作用是什么?
将http请求映射到响应的类/方法上
7.@Autowired的作用是什么?
@Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired的使用来消除set/get方法