龙潭书斋 -- 336




概述上一篇日志中,我们介绍了 org.springframework.web.filter 包中提供的过滤器SpringMVC 提供的 Filter 类简介本篇日志中我们来介绍其中的一个特殊的过滤器 -- 委派过滤器代理(DelegatingFilterProxy)DelegatingFilterProxy 虽然在 org.springframework.web.filter 包中,但是他其实并不算是一个过滤器,它的原型是 FilterToBeanProxy,即将 Filter 作为 spring 的 bean,由 spring 来管理在我们的应用中,登录验证是最常用的功能,Spring Security 利用 DelegatingFilterProxy 及一系列 Filter 为我们提供了高度可定制化的请求验证机制,以及用户、角色、权限的抽象机制,来完成对我们的请求的验证 Spring SecuritySpring3.2 提供了 Spring Security 安全性框架为应用程序提供声明式安全保护,主要为&nbs
#技术帖    #mvc    #龙潭书斋    #java   
概述上一篇日志中,我们介绍了 Spring MVC 的基本概念及执行流程,并创建了最基本的 hello world 项目Spring MVC 简介及 Hello World 项目创建上篇日志中介绍了一个非常重要的组件 -- DispatcherServlet,并且在 web.xml 中创建了默认的 DispatcherServlet 的配置本篇日志中,我们就来介绍一下 Spring3.0 以后支持的通过 java 代码来配置 DispatcherServlet 的配置方法 DispatcherServlet 的配置与两个应用上下文我们已经知道,DispatcherServlet 最重要的工作是接收请求并转发给特定的 Controller,因此首先需要配置的是 url 映射DispatcherServlet 启动时,会创建 Spring 应用上下文,并加载配置文件或配置类中所声明的 bean,因此我们需要在 DispatcherServlet 的配置中指定 bean 所
#技术帖    #controller    #mvc    #config   
概述上一篇日志中,我们介绍了 Spring3.1 开始提供的通过配置来让 Spring 在不同的环境中创建和加载不同的 BeanSpring3.1 新特性 -- 为不同的环境配置不同的 profile事实上,有时我们需要更细粒度的自定义配置,只有当满足某个特定条件时才创建和加载某个 bean,比如某个 bean 依赖于另一个 bean 的创建,如果另一个 bean 没有创建,就忽略当前 bean,或者需要通过环境变量来动态控制某个 bean 是否需要被创建 条件化配置 bean -- @Conditional 注解Spring4 引入了一个新的 @Conditional 注解,他可以用在带有 @Bean 注解的方法上,只有 @Conditional 给定的条件为 true,才会创建相应的 Bean Condition 接口@Conditional 需要传入一个 class 对象,对应的类是任何实现了 Condition 接口的类
#技术帖    #配置    #龙潭书斋    #java   
概述此前的日志中,我们介绍了如何通过 maven 配置实现为不同的环境打不同的 war 包,来实现不同环境使用不同资源、配置的功能通过 maven filtering 机制实现打包不同的资源配置目录这是生产环境中非常实用的一个功能,Spring3.1 也提供了类似功能,他通过为 bean 指定 profile 来让 Spring 在不同的环境选择是否创建和加载相应的 bean,这样的好处是同一个 war 包可以被应用于所有的环境,而不需要重新构建 使用 java @Configuration 配置 profile bean -- @Profile在 java 配置中,可以使用 @Profile 注解指定某个 bean 属于哪个 profile@Configuration @Profile("dev") public class DevelopmentProfileConfig { ... } 这样,这个 DevelopmentProfileConfig&n
#技术帖    #web    #xml    #龙潭书斋   
概述前面我们介绍了 Executor 框架Executor 框架及线程池的使用利用 Executor 框架,我们可以实现多个线程的并发调用基于 Executor 框架,java 提供了 ThreadPoolExecutor 实现了一个灵活、稳定的线程池,允许用户各种定制,同时,他还可以通过构造方法实例化一个对象来让用户根据自己的需求定制化该对象的操作 ThreadPoolExecutor 的创建ThreadPoolExecutor 的构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { ... }  通过上面的构造方法,我们就可以轻松创建一个线程池,他有下列参数:corePoolSize -- 线程池目标大小,即在没有任何任务时的线程池大小,
#读书笔记    #技术帖    #线程    #thread   
概述java 注解也被称为“元数据”,他是 jdk1.5 引入的 java 特性java 注解可以用于创建文档、跟踪代码依赖性、甚至基本的编译时、运行时检查,它可以灵活的实现模板代码的生成,或者为程序的相关部分引入额外信息注解以 @ 符号 + 注解名为标识在代码中存在,编译器在编译期自动加载它们的代码到相应的位置使用 java5 内置注解java5 的 java.lang 包中内置了三种注解:@Override -- 标识当前的方法将覆盖父类中的方法,虽然在实现覆盖时并不要求必须加上该注解,但该注解可以强制检查覆盖的完成,这样编译器可以在你拼写错误时发出错误提示@Deprecated -- 标识已经废弃的元素,一旦程序员使用了这些元素,编译器会发出警告@SuppressWarnings -- 关闭不当的编译器警告 元注解如果要创建一个注解,就需要使用元注解了,所谓的元注解,就是注解其他注解的注解,也就是在定义其他注解时需要使用的注解,他们标识了自定义注解的行为java5 定义了下面五个元注解中的前四个,java8 则定义了最后一个元注解:@Tar
#读书笔记    #技术帖    #龙潭书斋    #java   
概述让一个任务或线程启动很容易,但有时我们需要中止线程的执行,但这并不容易,因为 java 并没有提供任何机制来安全地终止线程本篇日志中,我们就来介绍一下 java 线程退出的几种方式 使用 volatile 类型参数保存取消状态由于线程间共享的特性,可以通过使用一个共享的 volatile 成员实现取消状态的保存,每隔一段时间,线程检查该成员的值判断是否应该退出这是一种常见的协作式机制,让取消任务的线程遵循一种协商好的协议package com.techlog.test.service; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** *
#读书笔记    #技术帖    #龙潭书斋    #线程   
Runnable 与 Callable上一篇日志中,我们设计了一个使用 ExecutorService 与 Runnale 接口创建线程的例子Executor 框架及线程池的使用此前我们介绍过 Runnable 与 Callable 的区别,Runnable 接口的 run 方法不能抛出异常也不具有返回值,而实际的使用中,我们常常需要在并发过程中获取每个线程的返回值,这时我们就需要 Callable 接口 使用 Future 收集线程执行结果最基本的线程执行结果收集方法是使用 Future 对象:package com.techlog.test.service; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executo
#技术帖    #龙潭书斋    #线程    #thread   



京ICP备15018585号