@before 基础模式,我们先直接看一下就可以了,比较简单,网上一堆... 不是我装逼哈,我学了那么久spring,aop的皮毛也就是网上的那些blog内容,稍微高级点的我也不会,这里跳过基础部分 不过有一点很重要,必须了解一波: 1. 测试被拦截的方法里面调用另一个同类被拦截方法 注意了:这个就只会被拦截一次,并不会拦截方法里面再次调用的那个方法,当然你直接在外围调用一次另一个方法,还是会被拦截 2. 测试被拦截的方法里面调用另一个不同类被拦截方法 注意了:这个就会被拦截两次,你调用的这个方…
Spring AOP一世 Spring AOP中的advice Before advice 这个就是在方法执行之前执行,也就是在对应的joinpoint之前 spring AOP二世 开启aspect注解 如果使用的是spring1.x的话,那么就添加一个bean <!-- 开启aop注解 --> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCrea…
分化:RMI,EJB,Hessian Spring有 Rmi,http,hessian,burlap 基于rmi的remoting方案 RMI要求远程类对象包路径和本地一致 基于HTTP的轻量级remoting方案 基于spring的http invoke 基于caucho的hessian 基于caucho的burlap 不做详细介绍,这种很少用,以后估计还是微服务多点 本人现在正在接触微服务,springcloud,先学学吧,后面有机会再拿出来详细解读 blog的话,因为最近几个月加班实在太可…
这个我也不是很了解,那么这个需要好好学习一下了 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的资源到底是来自哪里,所以..…
有关事务的楔子 什么是事务??? 事务就是以可控的方式对数据资源进行访问的一组操作. 事务本身持有四个限定属性 原子性,一致性,隔离性,持久性 事务家族 Resource Manager  RM,负责存储并管理系统数据资源的状态.数据库服务器.JMS消息服务器等都是. Transaction Processing Monitor. TPM或者 TP Monitor, 分布式事务场景中协调多个RM的事务处理. Transaction Manager.TM 是TP Monitor的核心模块,直接负责…
对于多个数据源的时候,我们如何切换不同的数据源进行数据库的操作呢? 当然我们可以直接定义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是我们封装…
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…
package cn.cutter.start.bean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; @Component public class AterTestBean { private static final Log logger = LogFactory.ge…
@afterreturning 我们同理写几个测试类 package cn.cutter.start.bean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; @Component public class AterReturningTestBean { private sta…
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…
容器内部事件发布 Spring的applicationContext容器提供的容器内事件发布功能,是通过java提供的自定义事件实现的 事件类型:eventObject 类继承 事件监听:eventListener 接口实现 定义事件类型 package event; import java.util.EventObject; /** * * Title: MethodExecutionEvent.java * Description: 定义一个自定义的事件对象 * @author xiaof…
Spring提供messagesource接口,来进行国际化事务处理 Applicationcontext会优先找一个名为messageSouce的messageSource接口实现bean,如果找不到那么内部会默认实例化DelegatingMessageSource(书中表示是:StaticMessageSource)实例 我们暗中观察一波源码,通过源码我们发现在spring5中其实默认实现的是DelegatingMessageSource对象: 但是通常一般配置方式是自己配置一个名称为mes…
Spring中的resource 我们先看看类之间的关系 注意我们的application是间接继承了resourceloader的,也就是说我们的application其实就是一个resourceloader 我们再看看这个类的继承,发现了,classpathxml这个对象实际上也是从最开始的resourceloader来的 那么我们加载application资源的时候,可以有2种方式: ResourceLoader resourceLoader = new ClassPathXmlAppli…
OC容器实现过程 1. 容器启动阶段,读取配置文件,解析文件BeanDefinitionReader 2. Bean 实例化阶段 关于BeanFactoryPostProcessor 插手spring的启动插入自己的逻辑,在第一阶段和第二阶段之间插入... IOC容器中bean的操作 1.bean的实例化与BeanWarpper 容器在内部实现的时候,采用策略模式来决定如何初始化bean 策略模式:http://www.cnblogs.com/cutter-point/p/5259874.htm…
可以实现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…
背景 对现有开源项目的代码进行翻译(文件名/命名/注释) · Issue #107 · program-in-chinese/overview 简单地说, 通过翻译源码, 提高项目代码可读性(对于母语为中文的开发者). 并在此过程中小结源码翻译辅助工具的需求. 源码库分支: program-in-chinese/vue 源码分析参考文档: Vue.js 技术揭秘 | Vue.js 技术揭秘 14个重命名的文件列表 core/vdom/helpers/normalize-children->规格化…
<Window x:Class="PlayTest.MediaControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="> <Grid> <Grid.Triggers> <Event…
1.http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方.那里有API开发文档,还有各种代码.资源下载. 2.http://social.msdn.microsoft.com/Forums/zh-CN/home 微软msdn论坛.定位于微软技术的传播和技术问题的解决,是学习微软技术的好去处. 3.https://referencesource.microsoft.com/ 如果你想了解C# API底层是如何实现的,可以来这里查阅. 4.http:…
DOS笔记:DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”[drive:][path][filename] 指定要列出的驱动器.目录和/或文件.    /A    显示具有指定属性的文件.        attributes   D 目录    R 只读文件, H 隐藏文件, A 准备存档的文件, S 系统文件, -  表示“否”的前缀    /B     使用空格式(没有标题信息或摘要).    /C  在文件大小中显示千位数分隔符.这是默认值.用 /-C…
掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime.Android Framework.Android Native Service.Android Binder.Android App.Android Testing.HTML5技术的源泉和精髓等核心技术,不仅仅是技术和代码本身,更重要的是背后的设计思想和商业哲学. 一.课程特色 l  贯通And…
为了对各种日志框架进行整合,微软创建了一个用来提供统一的日志编程模式的日志框架.<日志的基本编程模式>以实例演示的方式介绍了日志的基本编程模式,现在我们来补充几种"进阶"用法.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S808]利用配置定义日志过滤规则(源代码) [S809]利用日志范围输出调用链(源代码) [S810]LoggerMessage的应用(源代码) [S812]基于Activity的日志范围(源代码) [S…