java面试重点总结(4)

2019-05-18 17:59

针对数据库中的大数据,不希望特别早的加载到内存中,当使用到的时候在加载。 类懒加载:默认lazy=”true”只有用session.load()才能懒加载 集合懒加载:

针对一对多或者多对多的情况,加载set集合时决定在什么时候给集合填充数据。 当指定为懒加载时:只有使用到set集合时,他才会发出sql语句。

Spring:

1.IOC:控制反转”,不是什么技术,而是一种设计思想,在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。 依赖注入(DI):被注入对象依赖IoC容器配置依赖对象

所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。

控制的什么被反转了?就是:获得依赖对象的方式反转了。

依赖注入的三种配置方式: 1.通过set方式 2.通过构造函数

3通过注解(只能用于引用类型)

利用spring ioc和di 做到了完全面向接口编程。 比如:客户端做到完全面向接口编程。

2.Spring 容器加载过程:

1.spring容器关于ioc和di:启动过程----》 2.加载配置文件,启动spring容器--------》 3.spring容器会

* 如果有bean,则直接会为该bean创建对象

* 如果有类扫描的注解解析器,则会按照解析器的规则做 4.如果bean中有属性,则调用set方法(构造函数)给属性赋值 或者利用@Resource注解给属性赋值

5.创建对象之后,方法调用之前,会执行init方法,spring容器调用 6.在客户端调用方法

7.执行destroy方法,spring容器调用(针对单例) 8.关闭容器

3.注解:

必须依赖于类中的某个部分

Resourse(name=“user”) name Private User user;

name=“user”按照user 与容器中的进行匹配。不行报错

不写,则先按照user 匹配,不成功在按照类型匹配。再不行报错

4.动态代理:

AOP(面向切面编程)

通过代理模式:把日志,安全检查,权限重用了,做到了代码块的重用。面向切面编程。 代理对象的方法:就是拦截器invoke方法体的内容。 代理对象的方法把目标方法和切面整合在一起了。

Jdk代理:四个条件:目标接口目标类,拦截器,代理类 目标类和代理类实现了共同的接口

拦截器必须实现InvocationHandler接口,而接口中的invoke方法体的内容就是代理对象方法体的内容。

客户端调用代理对象的方法时,invoke方法执行。

代理对象和目标类实现了共同的接口,且代理类中有目标类的引用。

Cglib代理:

用CGlib生成代理类是目标类的子类。

用CGLib生成的代理类重写了父类的各个方法。

拦截器必须实现MethodInterceptor接口,而接口中的Interceptor方法体的内容

如果bean有代理对象,则返回代理对象,没有则返回原对象。 该目标类实现了接口则spring 容器会采用jdk代理,否则cglib

原理:

1.加载配置文件,启动spring容器。 2.spring容器为bean创建对象

3.解析AOP的配置解析切入点表达式。

4.看纳入spring管理的哪个类和切入点表达式匹配,如果匹配则创建代理对象。(拦截器由spring 内部实现)

5.代理对象的方法 = 目标方法 + 通知 6.客户端在context.getBean()时,该目标类实现了接口则spring 容器会采用jdk代理,否则cglib

切入点表达式 expression

确定哪个类可以生成代理对象 切入点表达式:

expression=\PersonDaoImpl类的所有方法。 代理:通过拦截器调用方法。。。。。(个人理解)

切面:日志,安全性的框架,权限的检查,总之与业务逻辑无关的都可以是切面。 通知:切面中的方法

Struts2 的启动流程; 1.启动tomcat 2.加载web.xml

3.过滤器:StrutsPrepareAndExecuteFilter

4.init()方法加载default.properties,struts-default.xml,struts-plugin.xml,struts.xml 5.静态注入配置文件中的 bean 当请求的url来时:

1. 调用StrutsPrepareAndExecuteFilter的doFilter()方法 2.把actionContext放入到ThreadLocal中 把ValueStack放入到ActionContext中 这样保证了值栈中的数据的安全性

3.创建action(因为是多例所以说现在才创建自己理解) 获取所有的interceptor 4. (也使用了动态代理) 执行所有的拦截器 执行action 中的方法 结果集的执行

Spring 声明式事务处理

Spring 事务架构:

接口与抽象类的差别,也可以体现出来。

接口platformTransactionManager

AbstractPlatformTransactionManager这个类对接口中的commit和rollback进行了实现,而getTransaction,因为不同的技术产生事务的方式不一样,所以这里有一个抽象方法 比如:你用hibernate(HibernateTransactionManage)或者jdbc(DataSourceTransactionManager)启动事务

具体到每一个实现类,自己根据自己特点实现getTransaction()这个方法

三大框架整合;

Struts.xml strut2 applicationContext.xml spring hibernate.cfg.xml hibernate

Spring + hibernate:

把sessionFactory注入到spring 中(并让hibernate 的事务由sessionFactory起。)

Spring+struts2:

1.容器启动时自动加载applicationContext.xml配置文件(配置ContextLoaderListener监听器)

spring容器是以监听器的形式整合到web服务器中的

因为service层和dao层的类在spring容器中都是单例模式配置,在spring容器启动的时候dao层和service层所有的类就创建对象了,包括service层代理对象在spring容器启动的时候,action层并没有创建对象,因为action对象是多例的,所以spring容器不负责销毁

org.springframework.web.context.ContextLoaderLister

2.让spring创建action

3.把struts的请求委托给spring管理:作用:创建Action实例的过程由spring处理

struts.xml

4.创建package并配置Action

框架各自流程: Hibernate:

加载配置文件(hibernate.cfg.xml *.hbm.xml) 产生sessionFactory 产生session

查询/启动事务 cud 关闭事务


java面试重点总结(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湿地生态动态监测技术规程-2013.1.11

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: