【sping揭秘】25、Spring远程方案】的更多相关文章

分化:RMI,EJB,Hessian Spring有 Rmi,http,hessian,burlap 基于rmi的remoting方案 RMI要求远程类对象包路径和本地一致 基于HTTP的轻量级remoting方案 基于spring的http invoke 基于caucho的hessian 基于caucho的burlap 不做详细介绍,这种很少用,以后估计还是微服务多点 本人现在正在接触微服务,springcloud,先学学吧,后面有机会再拿出来详细解读 blog的话,因为最近几个月加班实在太可…
一.远程调用概述 1.远程调用的定义 在一个程序中就像调用本地中的方法一样调用另外一个远程程序中的方法,但是整个过程对本地完全透明,这就是远程调用.spring已经能够非常成熟的完成该项功能了. 2.spring远程调用的原理 客户端调用本地接口中的一个方法调用的时候将会被客户端代理拦截,并向远程服务器发起一个servlet请求(服务器中的web.xml文件中专门配置了该Servlet),服务器接受请求,并根据spring配置文件和请求的url找到对应的“导出器”,导出器将pojo转换成控制器c…
Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.9.RELEASE</version> </dependency> <dependen…
这个我也不是很了解,那么这个需要好好学习一下了 JMS有2种消息域类型 1. point to point 点对点模式 2.发布订阅模式  publish/subscribe Pub/Sub 模式 传统JMS API开发 目前没有环境,所以目前就写个demo,后面补上环境去测试一发 package jms; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination;…
JndiTemplate 经过jdbctemplate,transactionTemplate...的洗礼,想必大家看到template就知道是个什么尿性了吧 一样的,我们只需要调用jnditemplate中的核心执行方法,就可以获取它暴露给我们的操作对象进行操作了 我们只需要对contextcallback中的方法进行实现 这里spring还给我们考虑了一条后路,那就是当我们的瞎JB使用的时候,那么势必会造成jndi跟我的程序耦合太紧,但是我们其实并不关系jndi的资源到底是来自哪里,所以..…
对于多个数据源的时候,我们如何切换不同的数据源进行数据库的操作呢? 当然我们可以直接定义2个DataSource,然后在每次获取connection的时候,从不同的DataSource中获取connection,类似如下 这种情况可以是2个数据库存放的数据性质是不同的,DataSource1存放1种数据,DataSource2存放另一种数据,每个数据库承担不同的数据访问请求,这2个是完全相互独立不相干的 这种就比较简单,那就是直接定义不同的jdbctemplate,设置不同的DataSource…
面向对象的操作方式,spring统一定义在org.springframework.jdbc.object以RdbmsOperation作为顶层抽象定义 Spring对各种ORM的集成 Spring的集成主要体现在对ORM框架的封装,jdbc提供了jdbctemplate Hibernate提供了hibernatetemplate,主要是简化了资源的回收控制 对于ibatis提供了sqlMapClientTemplate…
我们这是可以正好借助之前学的factorybean类,自己吧jdbctemplate加载到spring容器中,我们可以封装多个这种对象,那么可以实现针对不同的数据库的jdbctemplate 首先我们肯定要引入对应的jar,来构建数据源对象 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>…
统一的数据访问异常层次体系 基于基本的jdbc封装dao层访问接口,封装不论是访问,csv文件,关系数据库(RDBMS),ladp都可以封装成一个个DAO对象来进行访问 抛出问题 可是对于我们忽略了一个问题,那就是当DAO层发生异常的时候,我们是否应该在dao层进行处理,如果是,那么有个问题,客户端调用方法的时候,怎么知道发生了什么异常,客户端对于访问数据层发生的事情是不可预知的,所以我们需要在DAO中吧异常抛出,也就是在类上throw Exception 但是上面还有一个问题,dao是我们封装…
Spring AOP一世 Spring AOP中的advice Before advice 这个就是在方法执行之前执行,也就是在对应的joinpoint之前 spring AOP二世 开启aspect注解 如果使用的是spring1.x的话,那么就添加一个bean <!-- 开启aop注解 --> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCrea…
可以实现spring的factoryBean 接口,这样可以加入spring的IOC容器 比如现在有一个类叫MyObject,我们没有这个对象的源码,无法对这个对象进行操作,那么我们如何加入spring的配置呢? package cn.cutter.start.bean; import org.springframework.beans.factory.FactoryBean; import org.springframework.stereotype.Component; @Component…
Spring容器中bean默认是保持一个实例 这里做一个测试,基础代码 package cn.cutter.start.provider; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component; @…
<import>标签 引入其他的配置文件,如果A.xml 中的<bean>定义可能依赖B.xml中的某些<bean>定义,那么可以再A.xml中使用这种方式<import resource="B.xml" />的方式引入 <alias>标签 <alias name="FXNewsProvider" alias="provideralias"/>  这样对于这个bean FXN…
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙.  另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invker是一个新的远程调用模型,作为Spring框架的一部分,能够执行基于HTTP的远程调用(让防火墙不为难),并使用java的序列化机制(让开发者也乐观其变). Spring的HTTPinvoker把HTTP的简单性和java内置的对象序列化机制融合在一起.这使得HTTPinvoker成为替代RMI H…
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项目调用.我们需要使用原生的Eureka/Ribbon手动完成注册中心.查询服务列表功能.如果是非Java项目,可以使用 Spring Sidecar 项目接入Spring Cloud形成异构系统. JDK版本的选择 强烈建议使用JDK8, 因为Eureka Client的最新版本已经要求JDK8起了…
上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样,使用二进制消息进行客户端和服务端的交互,但是它的二进制消息可以移植到其他非java的语言中 Burlap是一种基于XML的远程调用技术,这使它可以移植到任何能解析XML的语言上 pom.xml  (这里有的jar是多余的) <?xml version="1.0" encoding=…
在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI)  适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务  2.Caucho的Hession和Burlap 适用场景:考虑网络限制时,通过http访问/发布基于java的服务.Hession是二进制协议,Burlap是基于XML的  3.Spring基于HTTP的远程服务(HTTP invoke) 适用场景:考虑网络限制,并希望使用基于xml或专有的序列…
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项目调用.我们需要使用原生的Eureka/Ribbon手动完成注册中心.查询服务列表功能.如果是非Java项目,可以使用 Spring Sidecar 项目接入Spring Cloud形成异构系统. JDK版本的选择 强烈建议使用JDK8, 因为Eureka Client的最新版本已经要求JDK8起了…
访问我的博客 前言 集群应用的配置文件如果写在项目的 resources 目录下面,当遇到需要修改某一个配置值时,需要将集群的所有应用的配置信息进行修改,并且将机密的配置信息比如数据库账号密码如果不进行加密配置在项目中很危险,一旦发生代码泄露问题,后果很严重. 为了避免上述情况发生,将配置信息存储到数据库中,比如数据库连接.用户名.以及密码,通过 Config 项目的一个接口提供获取配置信息.Config 项目只用于读取配置信息. 远程配置 一)新建类 RemoteProperties impo…
1.概念 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. hibernate对象: ① configuration (Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象) ②sessionFactory(一个…
最近从事的工作是web方面的,主要j2ee,spring jsp这些内容,由于刚入门,很多的技术都不了解.所谓初生牛犊不怕虎,刚入门,各种不顺手,比如写jsp,总是重复很多的代码,各种不爽,然后就去看jsp的模板技术, 看来看去也是各种不爽,于是就有了自己写一个工具的想法. ok,废话一堆.先说说jsp模板,最简单的include,成熟的解决有tiles,还有什么setmesh,当日还有更强大的什么fremaker,volocity(是这样写的吗,记不清楚)等等. include不说,实在太简陋…
一.前言 MongoDB是最为流行的开源文档数据库之一.Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB: 通过注解实现对象-文档映射: 使用MongoTemplate实现基于模板的数据库访问: 自动化的运行时Repository生成功能. 二.集成实现 启用MongoDB 为了有效的使用Spring Data MongoDB,我们需要在Spring配置中添加几个必要的bean.首先,我们需要配置MongoClient,用它来创建Mongo实例,以便于访…
有关事务的楔子 什么是事务??? 事务就是以可控的方式对数据资源进行访问的一组操作. 事务本身持有四个限定属性 原子性,一致性,隔离性,持久性 事务家族 Resource Manager  RM,负责存储并管理系统数据资源的状态.数据库服务器.JMS消息服务器等都是. Transaction Processing Monitor. TPM或者 TP Monitor, 分布式事务场景中协调多个RM的事务处理. Transaction Manager.TM 是TP Monitor的核心模块,直接负责…
package cn.cutter.start.bean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; /** * * @author xiaof * */ @Component public class AroundTestBean { private static fin…
@before 基础模式,我们先直接看一下就可以了,比较简单,网上一堆... 不是我装逼哈,我学了那么久spring,aop的皮毛也就是网上的那些blog内容,稍微高级点的我也不会,这里跳过基础部分 不过有一点很重要,必须了解一波: 1. 测试被拦截的方法里面调用另一个同类被拦截方法 注意了:这个就只会被拦截一次,并不会拦截方法里面再次调用的那个方法,当然你直接在外围调用一次另一个方法,还是会被拦截 2. 测试被拦截的方法里面调用另一个不同类被拦截方法 注意了:这个就会被拦截两次,你调用的这个方…
JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和Expiry. CachingProvider 定义了创建.配置.获取.管理和控制多个CacheManager.一个应用可以在运行期访问多个CachingProvider.CacheManager 定义了创建.配置.获取.管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中.一个CacheManager仅被一…
SpringAOP的实现机制 设计模式代理模式 参考我之前的代理模式 http://www.cnblogs.com/cutter-point/p/5226642.html 这里写个简单的案例 package spring.aop.designPattern; /** * * Title: ISubject.java * Description:代理模式的资源接口类 * @author xiaof * @date 2018年4月7日 * @version 1.0 * */ public inter…
动态代理 Jdk1.3只有引入的动态代理机制,可以再运行期间,为相应的接口(必须得有接口)动态生成对应的代理对象 基于以上问题,我们可以将横切关注点逻辑封装到动态代理的invocationhandler中. 性能肯定是比不过静态类的执行,毕竟这个是在运行期间使用反射 动态字节码增强技术 借助CGLIB直接在程序运行期间,动态构建字节码的class文件进行执行 不过,如果需要扩展的类以及类中的实例方法等声明为final的话,那么就无法对其进行子类化的扩展了. Spring aop 无法采用动态代理…
关于component-scan操作(去除,失效) 这个spring中的配置项,可以扫描我们对应的包下面的类,自动把带上@component,@service,@controller, @repository的类加入spring容器中托管 注意哦,component-scan 会默认吧annotation-config打开 但是不仅仅是这些,我们还可以对其中的范围进行限制 我们可以通过include-fileter和exclude-filter进行包含和排除 注意我们的范围选定方式有5种! 在我…
写在前面---------------------------------- 命运多舛,痴迷淡然 不知下一步该往哪里走,现在应该是我的迷茫期... 加油,快点走出去!!! 聪明的网友们,你们有没有迷茫的时候,你们又是怎么度过的呢? 通过上面的笔记我们可以了解到spring的事件的监听,但是这个都是spring中定义好的,那么我们如何自定义事件,监听,以及发布呢?. 那么事件的创建,我们是实现spring的事件接口 Spring的事件对象 package cn.cutter.start.event…