cglib

spring源码下载及转入ECLIPSE

删除回忆录丶 提交于 2020-04-26 22:48:37
转自:https://www.cnblogs.com/scevecn/p/6043284.html 本例spring源码版本是4.3.0的, 所以jdk需要准备1.8的(不同版本源码要求的jdk不一样) 1.8版本myeclipse10无编译环境,只有运行环境,出现点问题,下载最新版本的Eclipse Jee Neon github Spring 的源码已经从 svn 迁移到 GitHub。而且也改为基于 Gradle 的构建来构建项目。它取代了之前的 Ant+Ivy 系统,所以要构建 Spring 源码环境首先要安装 GitHub 以及 Gradle。 下载  Windows 系统对应的 GitHub 版本下载地址为: https://desktop.github.com/ 。如图所示: 安装 点击安装包 开始安装 下载安装文件 安装完成之后自动打开登陆界面(不需要,用不着) 登陆github(不需要,用不着) 结果     下载、安装,开始菜单上 GitHub 菜单,如图:        不依赖其他模块 :本附件配置将以第三方插件包的形式提供使用,它应该作为依赖关系的底层被依赖,而不能依赖其他业务模块。(DNA核心除外) 扩展灵活 :提供统一框架,满足各个项目的个性化附件配置需求。 Gradle   Gradle 是一个基于 Groovy 的构建工具,它使用 Groovy

Spring AOP实现原理(递归拦截器)

狂风中的少年 提交于 2020-04-25 09:42:15
一、AOP(Aspect Orient Programming,面向切面编程)相关术语: 1. 切面(Aspect):实现通用问题的类,例如日志,事务管理,定义了切入点和通知的类,通知和切入点共同组成了切面:时间、地点、做什么 2. 通知(Advice):类似Spring拦截器或者Servlet过滤器,是方法,定义切面要做什么,何时使用,有before,after,around.. 3. 连接点(Joinpoint): 程序能够使用通知(Advice)的一个时机,即程序执行过程中明确的点,一般是方法的调用,或异常被抛出 4. 切入点(Pointcut): 定义切面发生在哪里,带了通知的连接点,例如某个类或方法的名称,在程序中主要体现为切入点表达式 5. 引入(Introduction): 向现有的类添加新的属性或方法 6. 目标(Target): 被通知的对象 7. 代理(Proxy):AOP框架创建的对象,代理就是目标对象的增强,Advice + Target = Proxy 8. 织入(Weaving):把切面应用到目标对象时,创建新的代理对象的过程 a. 编译时织入:AspectJ,静态AOP,生成的字节码融入了增强后的AOP对象,性能更好 b. 加载时织入: Instrument c. 运行时织入:Spring AOP动态代理,在内存中临时生成一个AOP对象

101JAVA设计模式--业务逻辑实现扩展,框架使用分析总结

和自甴很熟 提交于 2020-04-24 16:52:44
23中设计模式目录如下: 工厂模式 抽象工厂模式 单例模式 建造者模式 原型模式 适配器模式 桥接模式 过滤器模式 组合模式 装饰器模式 外观模式 享元模式 代理模式 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 空对象模式 策略模式 模板模式 访问者模式 1.哪些JAVA不能用?3种 内存相关的:克隆模式,享元模式,备忘录模式。 特殊的:解释器模式,空对象模式。 2.哪些JAVA已经支持?3种 代理模式:JDK自动的动态代理:CGLIB,接口代理 观察者模式:JAVAEE中的拦截器,过滤器,Spring中的AOP都有观察者模式的踪影 迭代器模式:JAVAWEB中,循环处理可以替代。 3.哪些框架中用?6种 单例模式,抽象工厂,构建模式 统一接口:桥接模式 统一方法:类已经设计好的,改造使用访问者模式,设计前规划拟定,用外观模式 适配器模式 4.业务逻辑中用能用的设计模式13种 实际上能用的在有:业务逻辑,类的扩展,增强 a.类的扩展和增强: 单个类   1)增强:装饰者模式   2)扩展:代理模式 多个类   功能处理:命令模式,过滤器模式   选择:适配器模式,策略模式   组合:状态模式 b.业务逻辑处理 结构   a.组合模式   b.过滤器模式 行为   a.责任链模式:执行一组过滤条件方法,一直执行到 对象链底部   b

Spring 中使用了哪些设计模式?

試著忘記壹切 提交于 2020-04-24 16:13:52
好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种,我们举例说明。 1、简单工厂模式 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。 < beans> < bean id= "singletonBean" class= "com.itxxz.HelloItxxz"> < constructor-arg> < value>Hello! 这是singletonBean!value> </ constructor-arg> </ bean> < bean id= "itxxzBean" class= "com.itxxz.HelloItxxz" singleton= "false"> < constructor-arg> < value>Hello! 这是itxxzBean! value> </ constructor-arg> </ bean> </ beans> 2、工厂方法模式

JAVA面试常见问题之设计模式篇

有些话、适合烂在心里 提交于 2020-04-24 15:45:24
1、常见的设计模式 单例模式、工厂模式、建造模式、观察者模式、适配器模式、代理模式、装饰模式. 参考:https://www.cnblogs.com/cr330326/p/5627658.html 2、设计模式的六大原则及其含义 单一职责原则: 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。主要作用实现代码高内聚,低耦合。 开闭原则: 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 里氏替换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象。里氏替换原则是实现开闭原则的方式之一 依赖倒置原则: 抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。 接口隔离原则: 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用。 参考:https://www.cnblogs.com/dolphin0520/p/3919839.html 3、常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单利模式 常见模式及优缺点 : 饿汉式: 优点:不用加锁可以确保对象的唯一性,线程安全。 缺点:初始化对象会浪费不必要的资源,未实现延迟加载。 懒汉式: 优点

@Component和@Configuration作为配置类的差别

本小妞迷上赌 提交于 2020-04-24 02:06:07
随着spingboot的大火,注解式配置受到了大家的热烈欢迎,而@Component和@Configuration都可以作为配置类,之前一直都没觉得这两个用起来有什么差别,可能有时程序跑的和自己想的有所区别也没注意到。 直到看到这篇文章:https://my.oschina.net/guangshan/blog/1807721 。我意识到@Component和@Configuration是有区别的,错误的使用可能会导致严重的后果。 请看下面一段代码: @Configuration public class MyTestConfig { @Bean public Driver driver(){ Driver driver = new Driver(); driver.setId(1); driver.setName("driver"); driver.setCar(car()); return driver; } @Bean public Car car(){ Car car = new Car(); car.setId(1); car.setName("car"); return car; } } 测试代码如下 @RunWith(SpringRunner.class) @SpringBootTest public class TestApplicationTests {

深入理解Spring的ImportSelector接口

纵饮孤独 提交于 2020-04-22 05:15:05
 ImportSelector接口是至spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在,关于SpringBoot的分析可以参考: 深入理解SpringBoot的自动装配 。 一、关于ImportSelector接口   package org.springframework.context.annotation; import org.springframework.core.type.AnnotationMetadata; /** * Interface to be implemented by types that determine which @{ @link Configuration} * class(es) should be imported based on a given selection criteria, usually one or more * annotation attributes. * * <p>An { @link ImportSelector} may implement any of the following * { @link org.springframework.beans.factory.Aware Aware} interfaces, and their

Java 线程基础,从这篇开始

送分小仙女□ 提交于 2020-04-21 14:22:36
线程作为操作系统中最少调度单位,在当前系统的运行环境中,一般都拥有多核处理器,为了更好的充分利用 CPU,掌握其正确使用方式,能更高效的使程序运行。同时,在 Java 面试中,也是极其重要的一个模块。 线程简介 一个独立运行的程序是一个进程,一个进程中可以包含一个或多个线程,每个线程都有属于自己的一些属性,如堆栈,计数器等等。同时,一个线程在一个时间点上只能运行在一个 CPU 处理器核心上,不同线程之间也可以访问共享变量。线程在运行时,系统给每个线程分配一些 CPU 时间片,CPU 在时间片这段时间运行某个线程,当这个时间片运行完又跳转至下一段时间片线程,CPU 在这些线程中进行高速切换,使得程序像是在同时进行多个线程操作。 线程的实现 实现线程常用的两种方式:继承 java.lang.Thread 类、实现 java.lang.Runnable 接口。 继承 Thread 类方式 通过实例化 java.lang.Thread 类获得线程。创建 Thread 对象,一般使用继承 Thread 类的方式,然后通过方法重写覆盖 Thread 的某些方法。 首先创建一个继承 Thread 的子类。 public class DemoThread extends Thread{ // 重写 Thread 类中的 run 方法 @Override public void run() { //

《设计模式五》代理、迭代器、访问者模式

老子叫甜甜 提交于 2020-04-21 02:17:52
1.11 代理模式-Proxy(重要) 1.11.1 聚合方式(静态代理) 该代理需要和被代理对象实现相同的接口 class CarProxy implements Movable { // 可改进为 Movable m; Car car; public CarProxy (Car car) { this.car= car; } @Override public void move() { long start = System.currentTimeMillis(); car.move(); long end = System.currentTimeMillis(); System.out.println(end - start); } } interface Movable{ void move(); } 该代理聚合了car,代理了car的move方法,自己添加了打点计时。其他所有工作都是car也就是被代理对象做的 该聚合代理,也叫静态代理,可以改进代理实现Movable的各种,由于Car和代理对象都实现了Movable接口,改进为代理Movable的代理可以嵌套其他的代理,比如时间代理中聚合一个日志代理 // 即可在Car上实现时间和日志的双重代理 new CarLogProxy(new CarLogProxy(new Car()); 代理模式很像装饰模式

coding++:Spring 中的 AOP 原理

ε祈祈猫儿з 提交于 2020-04-18 12:22:00
coding++:Spring 中的 AOP 原理 为什么使用 AOP 如下场景: 现在有一个情景: 我们要把大象放进冰箱,步骤为:打开冰箱->放入大象->关闭冰箱 如果再把大象拿出来,步骤为:打开冰箱->拿出大象->关闭冰箱 代码如下: public void put() { System.out.println("打开冰箱..."); System.out.println("放入大象..."); System.out.println("关闭冰箱..."); } public void get() { System.out.println("打开冰箱..."); System.out.println("拿出大象..."); System.out.println("关闭冰箱..."); } 我们需要在每一个拿进拿出操作前后都要进行打开冰箱和关闭冰箱的操作,造成了代码重复。 而如果要拿进拿出其他动物,那么每一个动物的操作都需要加入打开冰箱关闭冰箱的操作,十分繁琐混乱。 解决方法就是AOP,将这些打开冰箱和关闭冰箱的操作单独抽取出来,做成一个切面,之后调用任何方法,都插入到方法前后即可。 先来看一些基本概念再来解决这个问题。 基本概念: AOP 即Aspect Oriented Program,面向切面编程。 使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现