spring原理

spring boot1.5.7 + spring security oauth2 跨域问题

匿名 (未验证) 提交于 2019-12-03 00:03:02
解决这种跨域问题可以通过增加过滤器来实现,为啥说可以呢,因为我也不清楚有没有其他方式可以实现。我实践了几次都是可行的,但是有一些原理我还是不清楚在文末提了一下。欢迎明白的朋友跟我指点一下。 配置过滤器 import org . springframework . context . annotation . Bean ; import org . springframework . context . annotation . Configuration ; import org . springframework . web . cors . CorsConfiguration ; import org . springframework . web . cors . UrlBasedCorsConfigurationSource ; import org . springframework . web . filter . CorsFilter ; @Configuration public class GlobalCorsConfiguration { @Bean public CorsFilter corsFilter ( ) { CorsConfiguration corsConfiguration = new CorsConfiguration ( ) ;

Spring Cloud Config Client原理讲解

匿名 (未验证) 提交于 2019-12-03 00:03:02
# Spring Cloud Config Client ## 预备知识 ### 发布/订阅模式 `java.util.Observable` 是一个发布者 `java.util.Observer` 是订阅者 发布者和订阅者:1 : N 发布者和订阅者:N : M ### 事件/监听模式 `java.util.EventObject` :事件对象 `java.util.EventListener` :事件监听接口(标记) ## Spring 事件/监听 `ApplicationEvent` : 应用事件 `ApplicationListener` : 应用监听器 ### Spring Boot 事件/监听器 #### ConfigFileApplicationListener 管理配置文件,比如:`application.properties` 以及 `application.yaml` `application-{profile}.properties`: profile = dev 、test 1. `application-{profile}.properties` 2. application.properties Spring Boot 在相对于 ClassPath : /META-INF/spring.factories Java SPI : `java.util

【spring boot】自动配置原理

匿名 (未验证) 提交于 2019-12-02 23:38:02
使用springboot开发web应用是很方便,只需要引入相对应的GAV就可以使用对应的功能,springboot默认会帮我们配置好一些常用配置。那么springboot是怎么做到的呢?这篇文章将一步步跟踪源码,查看springboot到底是如何帮我们做自动化配置。 springboot核心注解 可以看到使用@import导入一个开启自动配置的选择器 @import的作用,官方源码 * @author Chris Beams * @since 3.0 * @see Configuration * @see ImportSelector * @see ImportResource */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Import { /** * The @{@link Configuration}, {@link ImportSelector} and/or * {@link ImportBeanDefinitionRegistrar} classes to import. */ Class<?>[] value(); } 导入@Configuration注解的配置类 导入ImportSelector的实现类

CAS单点登录的原理

匿名 (未验证) 提交于 2019-12-02 21:53:32
1.首先了解几个概念   1)、TGC:Ticket-granting cookie,存放用户身份认证凭证的cookie,在浏览器和 CAS 2)、TGT:ticket granting ticket,TGT对象的ID就是TGC的值,在服务器端,通过TGC查询TGT。TGT封装了TGC值以及此Cookie值对应的用户信息。 3)、ST:service ticket,CAS为用户签发的访问某一service的票据,ST是TGT签发的。 2.单点登录的流程 现在有系统A、系统B、认证中心。 用户首次访问系统A的时候: 1)用户通过浏览器访问系统A https://localhost:8443/spring-shiro-cas/index,系统A取不到局部session,这时候系统A需要做一个额外的操作,就是重定向到认证中心 2)请求 https://localhost:8443/cas-server/login? service = https://localhost:8443/spring-shiro-cas/cas ,认证中心看浏览器有没有携带TGC,一看没有,返回cas login form让用户登录。 service url(在cas客户端也就是系统A配置) ,将来通过服务端认证后,还要重定向到系统A。/cas是拦截器的地址,接收cas服务端票据

spring学习(十五)--自己实现BeanFactory

倖福魔咒の 提交于 2019-12-02 21:45:18
上篇中讲解了如何使用BeanFactory加载spring的配置文件,进行bean的实例化。本篇中,自己实现一个BeanFactory来了解其原理。 spring的配置spring-beans.xml: <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id = "littleBall" class="serviceImpl.LittleBall"> <property name="girlsName"> <value>I am little ball!你好,我是小丸子!</value> </property> </bean> </beans> MyBeanFactory: package beanFactory; public interface MyBeanFactory { public Object getBean(String beanId); } MyBeanFacrotyImpl: package beanFactory; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.input

Spring事务用法示例与实现原理

匿名 (未验证) 提交于 2019-12-02 20:41:15
关于 事务 ,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子性,一致性,隔离性和持久性。对于Spring事务,其最终还是在数据库层面实现的,而Spring只是以一种比较优雅的方式对其进行封装支持。本文首先会通过一个简单的示例来讲解Spring事务是如何使用的,然后会讲解Spring是如何解析xml中的标签,并对事务进行支持的。 1. 使用示例 public class User { private long id; private String name; private int age; // getter, setter... } 如下是模拟插入用户数据的业务代码: public interface UserService { void insert(User user); } @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; @Override public void insert(User user) { jdbcTemplate.update("insert into user (name, age) value (?, ?)", user

Spring学习笔记之自定义ClassPathXmlApplicationContext类

匿名 (未验证) 提交于 2019-12-02 20:37:20
package com.hl.action; import org.junit.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.hl.service.GoodsService; public class GoodsAction { @Test public void save(){ AbstractApplicationContext aac = new ClassPathXmlApplicationContext("applicationContext.xml"); GoodsService gs = aac.getBean("goodsService", GoodsService.class); gs.save(); } } Spring的配置文件如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www

spring学习(十一)--web.xml零配置启动spring框架

隐身守侯 提交于 2019-12-02 18:54:31
在开始之前,我们需要注意一下,要基于Java Config实现无web.xml的配置,我们的工程的Servlet必须是3.0及其以上的版本; 1、我们要实现无web.xml的配置,只需要关注实现WebApplicationInitializer这个接口,以下为Spring源码: public interface WebApplicationInitializer { /** * Configure the given {@link ServletContext} with any servlets, filters, listeners * context-params and attributes necessary for initializing this web application. See * examples {@linkplain WebApplicationInitializer above}. * @param servletContext the {@code ServletContext} to initialize * @throws ServletException if any call against the given {@code ServletContext} * throws a {@code ServletException} */

Spring 面试题

久未见 提交于 2019-12-02 17:06:14
1. 有哪些不同类型的IoC(依赖注入)方式 ? 解释说明下 构造器依赖注入 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。 Setter方法注入 Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。 2. 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao工作原理是什么? Dao接口里的方法,参数不同时,方法能重载吗?   Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、

Spring原理的一些问题

こ雲淡風輕ζ 提交于 2019-12-02 16:42:36
1、什么是 Spring 框架?Spring 框架有哪些主要模块? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring 框 架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成 Spring 框架,不 必担心 Spring 是如何在后台进行工作的。 Spring 框架至今已集成了 20 多个模块。这些模块主要被分如下图所示的核心容器、数据访问/ 集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。 2、使用 Spring 框架能带来哪些好处? 下面列举了一些使用 Spring 框架带来的主要好处: 1、Dependency Injection(DI) 方法使得构造器和 JavaBean properties 文件中的依赖关系一 目了然。 2、与 EJB 容器相比较,IOC 容器更加趋向于轻量级。这样一来 IOC 容器在有限的内存和 CPU 资源的情况下进行应用程序的开发和发布就变得十分有利。 3、Spring 并没有闭门造车,Spring 利用了已有的技术比如 ORM 框架、logging 框架、J2EE、 Quartz 和 JDK Timer,以及其他视图技术。 4、Spring