当前位置 : 首页 » 文章分类 :  开发  »  Spring-概述

Spring-概述

Spring概述

Spring Framework Reference Documentation(4.1.3.RELEASE 完全中文翻译)
http://itmyhome.com/spring/index.html

Spring官方API文档
https://docs.spring.io/spring-framework/docs/current/javadoc-api/overview-tree.html

Spring 源码阅读
xuchengsheng / spring-reading
https://github.com/xuchengsheng/spring-reading


Spring Security 默认的过滤器链

1、WebAsyncManagerIntegrationFilter :Web异步管理集成过滤器, 使得异步线程可以从SecurityContextHolder中获取上下文信息

2、SecurityContextPersistenceFilter:两个主要职责:请求来临时,创建SecurityContext安全上下文信息,请求结束时清空SecurityContextHolder。

3、HeaderWriterFilter:(文档中并未介绍,非核心过滤器) 用来给http响应添加一些Header,比如X-Frame-Options, X-XSS-Protection*,X-Content-Type-Options.

4、CsrfFilter:在spring4这个版本中被默认开启的一个过滤器,用于防止csrf攻击,了解前后端分离的人一定不会对这个攻击方式感到陌生,前后端使用json交互需要注意的一个问题。

5、LogoutFilter:顾名思义,处理注销的过滤器

6、 UsernamePasswordAuthenticationFilter:这个会重点分析,表单提交了username和password,被封装成token进行一系列的认证,便是主要通过这个过滤器完成的,在表单认证的方法中,这是最最关键的过滤器。

7、 DefaultLoginPageGeneratingFilter:默认登录页面 生成器 过滤器

8、DefaultLogoutPageGeneratingFilter:默认退出登录页面 生成器 过滤器

9、BasicAuthenticationFilter:Basic认证方式过滤器

10、RequestCacheAwareFilter:(文档中并未介绍,非核心过滤器) 内部维护了一个RequestCache,用于缓存request请求

11、SecurityContextHolderAwareRequestFilter:此过滤器对ServletRequest进行了一次包装,使得request具有更加丰富的API

12、AnonymousAuthenticationFilter:匿名身份过滤器,这个过滤器个人认为很重要,需要将它与UsernamePasswordAuthenticationFilter 放在一起比较理解,spring security为了兼容未登录的访问,也走了一套认证流程,只不过是一个匿名的身份。

13、SessionManagementFilter : 和session相关的过滤器,内部维护了一个SessionAuthenticationStrategy,两者组合使用,常用来防止session-fixation protection attack,以及限制同一用户开启多个会话的数量

14、ExceptionTranslationFilter:直译成异常翻译过滤器,还是比较形象的,这个过滤器本身不处理异常,而是将认证过程中出现的异常交给内部维护的一些类去处理,具体是那些类下面详细介绍

15、FilterSecurityInterceptor :这个过滤器决定了访问特定路径应该具备的权限,访问的用户的角色,权限是什么?访问的路径需要什么样的角色和权限?这些判断和处理都是由该类进行的


IntelliJ IDEA 搭建Spring源码阅读环境

1、git clone 下载spring源码
https://github.com/spring-projects/spring-framework

2、IDEA 打开 spring-framework 源码,打开时提示如下,一切保持默认,什么都不用动,直接点OK,然后等待IDEA自动下载gradle,及gradle自动构建完成即可。


IDEA导入Spring源码

Spring IOC 容器源码分析系列文章导读
https://segmentfault.com/a/1190000015089790


spring入门实例

添加spring依赖

Eclipse中创建一个maven-archetype-quickstart 简单maven项目(非web项目),Artifact Id(即maven工程名)为spring-test,在pom.xml文件中添加spring的依赖,保存后稍等片刻,maven会将spring依赖的jar包下载到本地仓库目录中。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- Spring版本 -->
    <spring.version>3.1.4.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

创建类Hello

创建包com.masi.jmx.spring,在包内创建类Hello:

package com.masi.jmx.spring;

public class Hello
{
    String name;
    public void printHello() {
        System.out.println("你好,"+name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建spring上下文配置文件

编辑Java Build path,创建src/main/resources文件夹,在其中新建xml配置文件applicationContext-hello.xml,添加Hello类的bean配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="hello" class="com.masi.jmx.spring.Hello">
        <property name="name" value="Matt马特" />
    </bean>

</beans>

通过应用上下文获取bean

在包com.masi.jmx.spring中新建类HelloMain,加载spring上下文配置,获取bean,调用类方法:

package com.masi.jmx.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloMain {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
        Hello hello = (Hello)context.getBean("hello");
        hello.printHello();
    }
}

Run As->Java Application 运行,查看结果。


spring模块

  1. spring核心容器:提供依赖注入、Bean工厂、应用上下文
  2. AOP模块:提供面向切面编程
  3. 数据访问与集成:提供JDBC和DAO,以及ORM(Object-Relational Mapping)模块,例如Hibernate,iBatis
  4. Web与远程调用:Spring MVC框架,
  5. 测试模块

依赖注入

依赖注入和控制翻转是一个意思。
依赖注入(Dependency Injection, DI)
所谓依赖注入就是指:组件之间的依赖关系由容器在运行期决定,即由外部容器动态地将依赖对象注入到组件中。
目的是解除耦合,对象间只通过接口来表明依赖关系。
Spring通过依赖注入模式,将依赖关系从编码中脱离出来,从而大大降低了组件之间的耦合,实现了组件真正意义上的即插即用。这也是Spring最具价值的特性之一。
依赖注入,即 控制反转(Inversion of Control, IoC)
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

POJO类
Plain Ordinary Java Object,简单的Java对象,有一些private的参数作为对象的属性,然后针对每个参数定义了get和set方法作为访问的接口,有一些简单的运算属性也是可以的,但不允许有业务逻辑。


面向切面编程

面向切面编程(Aspect Oriented Programming, AOP)


spring自带命名空间

spring核心框架自带的10个xml命名空间

命名空间 用途
aop 为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
beans 声明bean和装配bean
context 配置Spring应用上下文,自动检测、自动装配bean,注入非Spring直接管理的对象
jee 提供了与java ee API的集成,例如JNDI和EJB
jms 为声明消息驱动的pojo提供了配置元素
lang 支持由Groovy、JRuby和BeanShell等脚本实现的bean
mvc 启用Spring MVC
oxm 支持Spring的对象到xml映射配置
tx 提供声明式事务配置
util 提供工具类元素


参考

跟我学spring3笔记–私塾在线
http://sishuok.com/forum/blogCategory/showByCategory/60/49.html?user_id=2

spring framework核心框架体系结构
https://zhuanlan.zhihu.com/p/24204354


上一篇 Java-正则表达式

下一篇 Java-字符串

阅读
评论
2k
阅读预计8分钟
创建日期 2015-07-10
修改日期 2019-01-30
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论