现在的位置: 首页 > 综合 > 正文

Spring in action 读书笔记

2017年10月27日 ⁄ 综合 ⁄ 共 4828字 ⁄ 字号 评论关闭
第一章 开始spring 之旅分布式计算(Distributed Computing) 程序所处理的数据往往来自于不同的数据库服务器,而不仅仅是本地机器。我们把它称为分布式数据. 分布式计算环境中,数据的处理不只是在一台机器完成,而是多台机器协作完成的, 在大部分情况下,分布式计算总是伴随着分布式数据. JNDI的原理以及实现 Spring 使用反向控制实现松耦合, 对象不从容器中查找依赖类, 而是容器在实例化对象的时候注入. 面向切面, 将业务逻辑从系统中分离, 实现了内聚开发. 在企业级应用Ioc简化得到service的过程在企业击中应用aop简化处理事务的方法如果编译不过aop的例子, 检查是否添加aopalliance.jar 在处理aop的例子时, 错误: 没有成功 Property 'proxyInterfaces' threw exception; nested exception is java.lang.ClassNotFoundException 第二章 装配Bean Bean工厂是一个通用的工厂, 可以创建和分发各种类型的Bean. Spring 中有几种BeanFactory的实现, org.springframework.beans.factory.xml.XmlBeanFactory Bean是延迟载入到Bean工厂中的, Bean只有在被需要的时候才被实例化. 当getBean()方法被调用的时候, 工厂会实例化Bean, 并依赖注入开始设置Bean的属性. 应用上下文 ApplicationContext比BeanFactory提供了更多的功能.(文本信息解析工具, 载入文件资源的通用方法, 向注册为监听器的Bean发送事件) ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext. 应用上下文在启动后预载入所有的单实例Bean. Bean的生命周期 1. 容器寻找Bean的定义信息并将其实例化. 2. 依赖注入, Spring按照Bean定义配置Bean的所有属性. 3. 如果Bean实现了BeanNameAware接口, 工厂调用Bean的setBeanName方法传递Bean的ID 4. 如果Bean实现了BeanFactory接口, 工厂调用Bean的setBeanFactory方法传入工厂自身. (5. 调用ApplicationContextAware的setApplicationContext方法(Bean在应用上下文中)) 5. 如果有BeanPostProcessor和Bean关联, postProcessBeforeInitialzation方法被调用. 6. 如果Bean指定了init-method方法, 将被调用. 7. 如果有BeanPostProcessor和Bean关联, postProcessAfterInitialzation方法被调用. 在Bean Factory中删除Bean的方法 1. Bean实现了DisposableBean接口, destory方法被调用. 2. 如果指定了定制的销毁方法, 就调用这个方法. Sping可以在建立和拆卸Bean时调用Bean的两个生命周期方法. 在Bean的定义中设置init-method, destroy-method方法. 实现Spring的两个接口Initialize和DisposableBean. 为什么Bean和Spring的API绑定在一起不好? 通过set方法注入依赖简单Bean配置, 引用其他Bean, 内部Bean, 装配集合(List, Set, Map, Props) 通过构造函数注入依赖可以通过设置type或index属性确定构造函数的参数自动装配 property元素可以让Spring自动装配, 需要设置bean中的autowire属性. 四种装配类型(byName, byType, constructor, autodect) 使用Spring的特殊Bean BeanPostProcessor的postProcessBeforeInitialzation和postProcessAfterInitialzation可以切入生命周期来修改Bean. 分散配置定制属性编辑器解析文本信息监听事件发布事件感知其他Bean 第三章 创建切面切面 需要实现的交叉功能连接点 应用程序执行过程中插入切面的地点通知 切面的实际实现切入点 定义了通知应该应用在哪些连接点目标对象 被通知对象代理 将通知应用到目标对象后创建的对象织入 将切面应用到目标对象从而创建一个新的代理对象的过程 Spring 只支持方法连接点前置通知MethodBeforeAdvice 后置通知AfterReturningAdvice 环绕通知MethodInterceptor 可以控制返回对象异常通知 定义在异常发生时应该有什么动作引入通知定义切入点 切入点决定了一个特定类的特定方法是否满足一条特定规则. Advisor把通知和切入点组合到一个对象中静态切入点只在代理创建的时候执行一次, 而不是在运行期间每次方法调用都执行. 动态切入点这一部分书上的例子都不能运行, 理解不了. 第四章 征服数据库 DAO代表数据访问对象, DAO的存在提供了读写数据库的一种方法. 服务对象通过接口访问DAO对象.如果数据访问层的细节渗透在应用的其他部分, 整个应用和数据访问层紧密的耦合在一起, 导致一种僵硬的应用设计. Sping提供的DataSource 从JNDI得到ds, 创建ds连接池 Spring采用JdbcTemplate模版模式简化jdbc的代码. 第五章 事务管理理解事务原子性, 一致性, 隔离性, 持久性. Spring对事物管理的支持和EJB的有很大不同, Spring可以使用持久化机制本身所提供的事务管理支持. 申明式事务 Spring对申明式事务管理的支持是通过AOP框架实现的. Spring的事务属性传播行为隔离级别 Spring有五种隔离级别. ISOLATION_DEFAULT, ISOLATION_READ_UNCOMMITTED, ISOLATION_READ_COMMITTED, ISOLATION_REPEATABLE_READ, ISOLATION_SERICALIZABLE 只读提示事务超时间隔事务概念比较抽象, 没有理解. 第六章 远程调用 Sping远程调用支持6种不同的RPC模式: RMI, Hessian, Burlap, HTTP invoker, EJB, Web Service. 第七章 访问企业服务典型的J2EE应用使用JNDI来存储和获取JDBC数据源和JTA事务管理器的对象. 在应用服务器中配置ds对象, 可以利用服务器的数据库连接池. JMS Java消息服务是一个用于异步处理的Java API 第八章 建立Web层 Spring MVC将所有请求都经过一个前端Servlet控制器(DispatcherServlet), 查询一个或多个HandlerMapping(将URL映射到一个控制器对象), 完成业务逻辑后, 控制器返回ModelAndView给DispatcherServlet. Spring的MVC控制器被配置成Spring应用上下文的一个普通JavaBean. ModelAndView对象保存了视图有关信息以及对象模型. 视图解析器用来将ModelAndView返回的视图名字映射为一个视图. 第一个参数用于显示视图组件的逻辑名. 第二三个参数用于传递给视图的数据对象. 需要配置ContextLoaderListener或ContextLoaderServlet载入上下文, 从而载入除servlet配置文件外的其他文件, 通过在Servlet上下文中设置contextConfigLocation参数来为上下文载入器指定一个或多个Spring配置文件. Spring MVC中所有处理器都实现了接口org.springframework.web.servlet.HandlerMapping BeanNameUrlHandlerMapping(默认的映射处理器) 根据控制器的名字将控制器映射到URL SimpleUrlHandlerMapping 用上下文配置文件中定义的属性集合将控制器映射到URL CommonsPathMapHandlerMapping 使用控制器代码中的源数据将控制器映射到URL. 在应用系统中申明多个处理器映射, 通过order属性设置相对优先权. Spring提供了丰富的控制器层次, Spring的控制器比Struts的Action更加灵活. 当控制器需要根据参数执行工作时, 应该继承命令控制器. AbstractController 非常简单的控制器. 当控制器需要根据参数执行工作时, 应该继承命令控制器AbstractCommandController, 这个控制器会自动将参数绑定到命令对象, 并且提供数据验证. 命令对象很象ActionForm, 但它仅仅只是个POJO并不需要继承任何特定类. SimpleFormController在接受到HTTP GET请求的时候显示表单, 收到HTTP POST请求的时候处理表单. WizardFormController用来处理跨越了多个页面处理表单的工作, 不知如何处理数据回填的问题. MultiActionController可以实现多个动作, 每个动作分配给不同的方法.两种其它类型的方法名解析器 ParameterMethodNameResolver, PropertiesMethodNameResolver. 没有命令对象, 如何回填数据以及得到用户数据, 难道用request.attribute()? ThrowawayController 一次性控制器自己做为自己的命令对象. 没有做实验, 感觉不适合太多页面元素的情况. 视图解析 InternalResourceViewResolver 将逻辑视图解析为一个用模版文件的视图对象 BeanNameViewResolver 将逻辑视图解析为一个用DispatcherServlet应用上下文的视图对象 XmlViewResource 从一个XML文件中解析视图对象. 感觉上Xml的好处是可以将配置从servlet的xml中分离出来, 除此之外和Name的方式没有区别. ResourceBundleViewResolver 将逻辑视图解析为ResourseBundle的视图对象 ResourceView可以支持国际化, 比较有意思. 可以使用order来指定多视图解析器 Spring 的web层提供了比Struts的控制器, 视图更多的选择机会, 更多的特殊场景, 比较典型的是WizardFormController, 视图可以解析为pdf, excel比struts框架更强大, 并且将Command对象仅仅作为一个POJO不用再继承类. 但是感觉配置更复杂, 需要更多的时间理解每种控制器类型的用法, 强大了不止一点点, 但是好像标签方面Spring没有Struts标签多, 不过无所谓, 可以用JSTL标签代替.不过感觉继承AbstractController和AbstractCommandController没有实际价值, 有哪个系统会傻到只要显示数据或是只要提交数据呢?搞不懂设计的人是怎么想的, 难道仅仅只是为了设计而使用码? 第九章 其他视图技术 Velocity, FreeMarker是区别于jsp的一种模版语言. Spring 的excel导出基于poi 读后感: 第一章, 第二章, 第八章写的比较好, 但是代码片断不能购成一个完整的例子, 第三章Aop由于没有完整的例子, 对Aop又没有概念, 很难理解.第二部分牵涉到很多J2ee的概念, 但由于对j2ee理解不是很好, 所以这一部分看的比较肤浅.第十, 十一章是关于Spring和其他框架的接口, 以及安全不想看了, 以后有机会再说吧. 总的来说, 还不错.

抱歉!评论已关闭.