spring原理

【10分钟学Spring】:@Profile、@Conditional实现条件化装配

江枫思渺然 提交于 2019-12-08 18:15:26
根据不同的环境来装配不同的bean 企业级开发中,我们一般有多种环境,比如开发环境、测试环境、UAT环境和生产环境。而系统中有些配置是和环境强相关的,比如数据库相关的配置,与其他外部系统的集成等。 如何才能实现一个部署包适用于多种环境呢? Spring给我们提供了一种解决方案,这便是条件化装配bean的机制。最重要的是这种机制是在运行时决定该注入适用于哪个环境的bean对象,不需要重新编译构建。 下面使用Spring的profile机制实现dataSource对象的条件化装配。 1、给出开发环境、测试环境、生产环境dataSource的不同实现类 说明:此处只为演示条件化装配bean,不做真实数据源对象模拟。 public interface DataSource { void show(); } public class DevDataSource implements DataSource{ public DevDataSource(){ show(); } public void show() { System.out.println("开发环境数据源对象"); } } public class TestDataSource implements DataSource{ public TestDataSource() { show(); } public void show(

Spring和Mybatis整合时无法读取properties的处理方案

橙三吉。 提交于 2019-12-08 12:09:05
版本:Spring:3.1.4、Mybatis:3.1.1、Mybatis-Spring:1.1.1; 背景: config.properties配置文件信息 Properties代码 ##数据库(mysql|mssql|oracle...) environment=mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:// 127.0 . 0.1 : 3306 /portal?useUnicode=true&characterEncoding=utf8 jdbc.user=root jdbc.password=root #初始化连接(根据实际访问量设置大小) jdbc.initialSize= 10 #最大空闲连接(根据实际访问量设置大小) jdbc.maxIdle= 50 #最小空闲连接(根据实际访问量设置大小) jdbc.minIdle= 10 #最大连接数量(根据实际访问量设置大小) jdbc.maxActive= 200 Spring配置信息(截取部分) Xml代码 < context:property-placeholder location = "classpath:config.properties" /> <!--创建jdbc数据源 --> < bean id = "dataSource"

eclipse 使用maven 搭建spring + springMVC + spring Data + jpa 框架

≯℡__Kan透↙ 提交于 2019-12-06 22:06:27
第一项目结构展示: 项目中所引用到的jar文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springdataSample</groupId> <artifactId>springdataSample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId>

spring cloud bus 消息总线 原理总结

家住魔仙堡 提交于 2019-12-06 21:43:25
1.spring cloud bus spring cloud bus整合java的事件处理机制和消息中间件的发送和接收,主要是由发送端、接收端和事件组成。 目前spring cloud bus只实现了RabbitMq和Kafka的封装。 2、spring cloud bus与spring cloud config的整合,并以RabbitMq作为消息代理,实现了 应用配置的动态更新。 向service A的实例3发送post请求,访问/bus/refresh接口,此时,service A的实例3就会将刷新请求发送到消息总线上,该消息事件会被service A的实例1和实例2从总线中获取到,并重新从config server中获取它们的配置信息,从而实现配置信息的动态更新。 1.在config server中引入 spring cloud bus,将配置服务端也加入到消息总线中来; 2./bus/refresh请求不再发送到具体服务实例上,而是发送给Config Server,并通过destination参数指定需要更新配置的服务或实例。 来源: CSDN 作者: 持续行动 链接: https://blog.csdn.net/spark_guo/article/details/81053169

面试

最后都变了- 提交于 2019-12-06 09:09:25
面试 1、面试指导方针 在面试官问到技术的时候 是什么?有什么特点? what 为什么用它? why 在项目的哪一个地方用过? 使用的具体步骤?使用过程中问题总结? how 2、面试自我介绍之大套路 3、排序算法? 冒泡排序: 每次拿两个数进行比较,总是把小的放在最前面,大的放在最后面,第二次是第二个数和第三个数比较,如果第三个小于第二个,那么第三个和第二个替换位置,一次这样比较替换,第一轮循环完了呢,放在最后面的那个数就是这 一串数字中最大的数。第二轮循环和第一轮一样,第一个和第二个比较,最小的放在最前面,依次类推。如果有10个数字,那么就进行9次循环,最小的在最前面,最大的放在最后面。 好处呢,就是查询速度快 二分查找: 二分查找就是从一串数字中找到某个数字。 原理就是必须有一串数字是从小到大排序,把这串数字进行划分,分为三段,前半段,中止段,和中止后半段。查找数字或者字符先从中止段查找,查到的数字或者字符和中止正好相等,那么久直接取出来,如果比它大就从后半段查找,后半段在进行二分法,进行递归的调用查找,如果比中止小,走前面的中止段,在进行拆分,进行二分查找法。 4、说一下你对Spring的理解? 关于Spring的话,我们平时做项目一直都在用,不管是使用ssh还是使用ssm,都可以整合。Spring里面主要的就三点,也就是核心思想,DI,IOC,AOP。 DI就是依赖注入

spring security实现记录用户登录时间等信息

懵懂的女人 提交于 2019-12-06 06:59:28
目录 spring security实现记录用户登录时间等信息 一、原理分析 二、实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-security的配置文件中指定自定义的AuthenticationSuccessHandler 2.3 测试 三、总结 spring security实现记录用户登录时间等信息 上一篇: spring security实现记住我下次自动登录功能 一、原理分析 spring security提供了一个接口 AuthenticationSuccessHandler,该接口中只有一个方法,用来进行登录成功后的操作 public interface AuthenticationSuccessHandler { /** * Called when a user has been successfully authenticated. * * @param request the request which caused the successful authentication * @param response the response * @param authentication the <tt>Authentication</tt> object which was created

Spring Boot常用注解和原理整理

天大地大妈咪最大 提交于 2019-12-06 06:57:02
一、启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { } 查看源码可发现,@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration`,@ComponentScan`这三个注解 ``@SpringBootConfiguration注解,继承@Configuration注解,主要用于加载配置文件@SpringBootConfiguration继承自

从零开始手写 spring ioc 框架,深入学习 spring 源码

北城以北 提交于 2019-12-06 06:56:34
IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理。 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过。 但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升。 所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理。 spring 的核心 Spring 的核心就是 spring-beans,后面的一切 spring-boot,spring-cloud 都是建立在这个地基之上。 当别人问你 spring 的时候,希望你可以谈谈自己对于 spring ioc 自己更深层的见解,而不是网上人云亦云的几句话。 什么是 IOC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。 通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。 也可以说,依赖被注入到对象中。 为什么需要 IOC IoC 是解耦的一种方法。 我们知道Java 是一门面向对象的语言,在 Java 中 Everything is Object

项目五:Spring Security开发安全的REST服务(Spring Security技术栈开发企业级认证与授权)

℡╲_俬逩灬. 提交于 2019-12-06 05:33:34
第一章 导学 第二章 开始开发 1、环境安装 2、架构介绍 3、Hello Spring Security入门项目 第三章 使用Spring MVC开发RESTful API 1、开发基本的增删改查接口 2、Spring MVC高级特性 3、REST服务开发常用工具 第四章 Spring Security开发基于表单的认证 1、Spring Security原理介绍 2、基于Spring Security的默认实现开发“用户名+密码”认证 3、开发“手机号+短信”认证 第五章 Spring Social开发第三方认证 1、OAuth协议以及Spring Social原理简介 2、实现QQ认证和微信认证 3、SESSION管理及退出 第六章 Spring Security OAuth开发App认证模块 1、Spring Security OAuth简介 2、重构原有认证功能,使其支持基于Token的认证方式 3、基于OAuth协议实现SSO(单点登录) 第七章 Spring Security授权控制 1、Spring Security授权机制介绍 2、实现三种不同复杂度的授权机制 3、重构代码 来源: https://www.cnblogs.com/yanguobin/p/11964129.html

Spring事务笔记

自古美人都是妖i 提交于 2019-12-06 05:25:52
1:在同一个类中,如果A方法有事务,B方法也有事务(propagation = Propagation.REQUIRES_NEW),如下代码所示: @Override@Transactionalpublic void insertUser(User user, Goods goods){ userMapper.insert(user); try { }catch (Exception e){ }}@Override@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertGoods(Goods goods) throws Exception{ goodsMapper.insert(goods); throw new Exception("sadf");}则B方法是会插入数据的,事务是没有回滚的。2:Spring事务实现机制:Spring事务是使用AOP原理实现的,其实也就是动态代理,动态代理的作用是实现方法增强。动态代理需要两个重要的类:Proxy和InvocationHandlerProxy :负责new对象InvocationHandler : 实现增强3:注解:@Auword,也是实现代理模式 也是代理类spring容器启动的时候 所有的类全部扫描,发现加了注解之后,方法为key