美文网首页我爱编程
Spring 实战(第四版)笔记

Spring 实战(第四版)笔记

作者: maxbin | 来源:发表于2018-03-19 20:35 被阅读131次

    spirng介绍

    为了简化java开发,spring使用4种关键策略:

    • 基于POJO的轻量级和最小侵入性编程;
    • 通过依赖注入和面向接口实现松耦合;
    • 基于切面和惯例进行声明式编程;
    • 通过切面和模板减少样板式代码。

    依赖注入DI

    组装bean

    • 使用注解@Component,需要开启注解扫描
    • 还需要使用@Named("serverName")
    • 在@ComponentScan中可以设计扫描的基础包
    • @Autowired自动注入的注解,可以放在类构造器上,也可以放在属性的setter方法上(其实是任何方法上);设置required属性为false,如果没有匹配的bean,将会标记为未装配状态;同时可以用java依赖注入规范中的@Inject注解;
    • @Bean注解可以返回方法方法的bean,默认bean的id为方法名,类上加@Configuration注解,等同于<beans>元素
    • XML中通过<bean>元素声明一个bean

    多环境的配置profile

    • 可以使用@Profile注解声明类属于哪个profile
    • 使用spring.profiles.active属性激活需要使用的环境profile
    • 使用spring.profiles.default属性设置默认的环境
    • 集成测试的时候使用@ActiveProfiles注解

    条件生成bean

    • @Conditional 注解,配置实现了Condition接口的class类,可以根据条件是否生成bean;

    @Autowired自动装配歧义

    • 产生原因:比如一个自动注入的接口,有多个实现类可以选择的时候;
    • 解决方案:(1)使用@Primary注解标注首选的bean;或者xml中设置<bean>元素的primary的属性为true;(2)限定自动装配的bean,使用@Qualifier限定装配bean的ID;

    bean的作用域

    • 默认情况下spring应用上下文所有的bean都是以单例的形式创建的;
    • Spring定义的作用于:
    1. 单例(Singleton):整个应用只创建一个bean的实例;
    2. 原型(Prototype):每次注入或者通过spring的上下文获取都会创建一个新的bean实例;
    3. 绘画(Session):在web应用中,为每个会话创建一个bean实例;
    4. 请求(Request):在web应用中,为每个请求创建一个bean实例;

    注入外部值

    • 使用@PropertySource注解和Environment
    • 使用占位符${}
    • 使用spring表达式语言(SpEL)进行装配:
    1. SPEL表达式需要放在#{}中
    2. T()运算符可以得到class对象

    面向切面的Spring(AOP)

    切面的五种类型通知

    1. 前置通知(Before):在目标方法被调用之前通知功能;
    2. 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
    3. 返回通知(After-returning):在目标方法成功执行之后调用通知;
    4. 异常通知(After-throwing):在目标方法抛出异常后调用通知;
    5. 环绕通知(Around):在方法的调用前和调用后都执行自定义的行为;
    • Spring运行时通知对象:Spring在运行期把切面织入到Spring管理的bean中;
    • Spring的AOP基于动态代理实现,只支持方法级别的连接点;
    • Spring参考AspectJ方法实现AOP,主要方法execution(* 包命名空间.方法名(..)):
    1. 括号中的第一个参数*,代表方法的返回值;
    2. 可以使用or、and、&&、||、!等连接词
    • 通过注解可以为代理的类添加新方法;通过@DeclareParents注解或者XML元素<aop:declare-parents>声明以透明的方式为被通知的对象映入额外的接口;

    SpringMVC

    • SpringMvc的入口是DispatchServlet,由这个前端控制器将请求委托给应用程序的其他组件实际执行处理(SpringMvc的控制器controller);
    • 使用MockMvc测试Controller控制器的返回试图;
    • 使用Java Validation Api(JSR-303)校验输入的值,比如:Hibernate Validator;javax.validation.constraints包中的注解;
    • InternalResourceViewResolver类将视图名称解析成jsp文件;

    SpringMVC的高级技术

    • 配置multipart解析器处理文件上传;
    • 使用@ResponseStatus注解自定义状态码和响应;

    添加控制器通知:

    • 如果需要统一处理异常需要在多个控制器内加上@ExceptionHandler注解,或者继承一个基类:
    1. 除了基类的实现方式还可以用@ControllerAdvice注解实现控制器通知;
    2. 该注解标注的类包含一个或者多个如下类型的方法:@ExceptionHandler、@InitBinder、@ModelAttribute;
    3. @ControllerAdvice注解本身已经使用了@Component,因此@ControllerAdvice注解所标注的类将会自动被组件扫描获取到,就像带有@Component注解的类一样;

    跨重定向请求传递数据

    • 通过URL模板进行重定向:model中添加的参数会显示在{}的占位符中,或者占位符中未有的参数,会自动添加作为url的请求参数;
    • 使用falsh属性:使用RedirectAttributes提供的addFlashAttributes()方法添加重定向后需要获取的对象;相比于添加到session中,再清除的好处是不需要管理对象;

    Spring Web Flow

    • 将页面组织成特定的工作流程跳转;

    Spring Security

    • 过滤器Filter,是Servlet的一种加强版,对用户请求的预处理;
    • 拦截器Interceptor,是Aop的实现策略,用于在方法被访问之前进行拦截,然后在之前或者之后(5种方式)加入某些操作;
    • Filter和Interceptor的区别
    1. Filter是基于函数回调的,而Interceptor则是基于Java反射的。
    2. Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
    3. Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
    4. Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
    5. 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
    • Filter和Interceptor的执行顺序
    1. 过滤前-拦截前-action执行-拦截后-过滤后
    • Spring Security使用ServletFilter提供各种安全性功能;

    Spring中的JDBC

    配置数据源

    • 通过JDBC驱动程序定义的数据源;
    • 通过JNDI查找的数据源;
    • 连接池的数据源;

    Spring Boot

    • Spring Boot Starter,将依赖分组进行整合;
    • 自动配置:Spring Boot利用Spring4对条件化配置的支持,合理地推测用用所在的bean,并自动装配他们;
    • 命令行接口:Spring Boot的CLI发挥了Groovy编程语言的优势,结合自动配置进一步简化Spring应用的开发;
    • Actuator:它为Spring Boot应用添加一定的管理特性;

    相关文章

      网友评论

        本文标题:Spring 实战(第四版)笔记

        本文链接:https://www.haomeiwen.com/subject/uivuqftx.html