cglib

JavaWeb学习之Spring框架(一)

狂风中的少年 提交于 2020-05-03 21:00:30
Spring 负责管理项目中的所有对象, Spring 看作是项目中对象的管家 Spring 框架的功能: aop 支持、 ioc 思想、 spring jdbc 、 aop 事务、 junit 测试支持 Spring 搭建 : 导包: beans 、 context 、 core 、 exception 四个基础包 apache 日志包 创建实体类对象 书写配置文件:建议文件名为 applicationContext.xml 导入约束文件 Schema 约束 代码测试: 1 、创建容器对象 ApplicationContext ac=new ClassPathXmlApplicationContext(“applicationContext.xml”); 2、从容器中获得实体对象 User user=(User)ac.getBean(“User”); 3、打印该对象 System.out.println(user); Spring 思想: ioc: 反转控制 反转控制就是创建对象的方式反转了。以前对象的创建由开发人员自己维护,包括依赖关系也是自己注入;使用 spring 之后,对象的创建以及以来关系可以由 spring 完成创建以及注入。 反转控制就是反转了对象的创建方式。从我们自己创建反转给了程序 di: 依赖注入(注入就是赋值) 实现 ioc 思想需要 di 做支持

【java虚拟机】几种内存溢出及解决方案

China☆狼群 提交于 2020-05-02 15:35:19
作者:平凡希 地址:https://www.cnblogs.com/xiaoxi/p/7406903.html 1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。 解决方法:手动设置JVM Heap(堆)的大小。 Java堆用于储存对象实例。当需要为对象实例分配内存,而堆的内存占用又已经达到-Xmx设置的最大值。将会抛出OutOfMemoryError异常。例子如下: package com.demo.test; import java.util.ArrayList; import java.util.List; /** * VM Args: -Xms5m -Xmx5m */ public class HeapOOM { public static void main(String[] args) { int count = 0; List<Object> list = new ArrayList

Spring框架总结篇

你说的曾经没有我的故事 提交于 2020-05-01 13:25:05
文章目录 一、Spring框架介绍 二、IoC控制反转 三、AOP面向切面编程 四、配置文件与Bean 五、Spring集成JdbcTemplate 六、事务控制 一、Spring框架介绍 Spring Framework即 Spring轻量级企业开发框架 ,提供了从表现层到业务层再到持久层的一套完整的解决方案。我 们在项目中可以只使用 spring 一个框架,就可以提供表现层的 mvc 框架,持久层的 Dao 框架。它的两大核心 IoC 和 AOP 更是为我们程序解耦和代码简洁易维护提供了支持。 关于Spring框架的介绍可以参照下面的博客: Spring介绍 二、IoC控制反转 将对象的调用权交给容器,通过容器实现对象的装配和管理。 这就是IoC的概念,IoC的实现方式主要有 依赖注入DI 和 依赖查找DL 两种。IoC实际是一种设计思想,在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了? ”这个经典问题。他总结出是依赖对象的获得被反转了。谁控制谁?当然是 IoC 容器控制了对象 ;控制什么?那就是主 要控制了外部资源获取 (不只是对象包括比如文件等)。 关于IoC控制反转的内容可以参照下面的博客: IoC环境搭建 依赖注入DI介绍 DI—构造器注入 DI

spring5 源码深度解析----- AOP代理的生成

主宰稳场 提交于 2020-05-01 04:44:59
在获取了所有对应bean的增强后,便可以进行代理的创建了。回到AbstractAutoProxyCreator的wrapIfNecessary方法中,如下所示: 1 protected static final Object[] DO_NOT_PROXY = null ; 2 3 protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) { 4 if (StringUtils.hasLength(beanName) && this .targetSourcedBeans.contains(beanName)) { 5 return bean; 6 } 7 if (Boolean.FALSE.equals( this .advisedBeans.get(cacheKey))) { 8 return bean; 9 } 10 if (isInfrastructureClass(bean.getClass()) || shouldSkip(bean.getClass(), beanName)) { 11 this .advisedBeans.put(cacheKey, Boolean.FALSE); 12 return bean; 13 } 14 15 // Create proxy

Spring AOP简介与底层实现机制——动态代理

心不动则不痛 提交于 2020-05-01 02:17:17
AOP简介 AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。AOP 是 OOP(面向对象编程 Object Oriented Programming)的思想延续 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等) AOP核心思想 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强 切面:需要代理一些方法和增强代码 AOP的应用场景 场景一:记录日志 场景二:监控方法运行时间 (监控性能) 场景三: 权限控制 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 ) 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交或者回滚、关闭事务 ) Spring AOP编程两种方式 方式一:Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类植入增强代码(编程复杂,不推荐) 方式二:Spring 2.0 之后支持第三方 AOP框架(AspectJ ),实现另一种 AOP编程 (推荐) AOP编程相关术语 1.Aspect(切面): 是通知和切入点的结合

Spring AOP 入门实例详解

北城余情 提交于 2020-05-01 00:48:09
###AOP概念 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物

问题总结(一)

自古美人都是妖i 提交于 2020-04-28 17:36:40
dubbo分层架构设计 Spring bean加载流程 Spring循环依赖问题 消息中间件重复消费问题 Dubbo消费注册逻辑 ZK脑裂问题 脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。 过半机制 在领导者选举的过程中,如果某台zkServer获得了超过半数的选票,则此zkServer就可以成为Leader了 选举的过程中为什么一定要有一个过半机制验证? 因为这样不需要等待所有zkServer都投了同一个zkServer就可以选举出来一个Leader了,这样比较快,所以叫快速领导者选举算法 跳表数据结构 链表加多级索引的结果就是跳表,是一种用空间换时间的设计思路 原始链表 搜索引擎设计 正排索引 一个唯一的编号作为 ID,然后使用哈希表将 ID 作为键(Key),把的内容作为键对应的值(Value)。这样,我们就能在 O(1) 的时间代价内,完成对指定 key 的检索。这样一个以对象的唯一 ID 为 key 的哈希索引结构,叫作正排索引(Forward Index) 倒排索引 这样,我们就建立了一个哈希表,根据关键字来查询这个哈希表,在 O(1) 的时间内,我们就能得到包含该关键字的文档列表

Spring之IOC原理及代码详解

我们两清 提交于 2020-04-28 02:28:01
一、什么是IOC   引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) [1] principle. IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method. The container then injects those dependencies when it creates the bean. This process is fundamentally the inverse, hence the name Inversion of

Java Sping 第四章——Sping AOP

爷,独闯天下 提交于 2020-04-27 09:49:28
一、Spring Aop的基本概念 1.Aop的概念 面向切面编程(AOP,Aspect Oriented Programming),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等。 AOP实现原理是java动态代理,但是jdk的动态代理必须实现接口,所以spring的aop是用cglib这个库实现的,cglis使用里asm这个直接操纵字节码的框架,所以可以做到不使用接口的情况下实现动态代理。 AOP与OOP的区别: OOP面向对象编程,针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或阶段,以获得逻辑过程的中各部分之间低耦合的隔离效果。这两种设计思想在目标上有着本质的差异。 OOP面向名次领域,AOP面向动词领域。 2.Aop的术语 1)连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后

Java 基础之详解 Java 反射机制

ぃ、小莉子 提交于 2020-04-27 02:40:20
一、什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。   一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是使用反射则可以相反的通过对象找到类。   通俗的讲反射就是可以在程序运行的时候动态装载类,查看类的信息,生成对象,或操作生成的对象。它允许运行中的 Java 程序获取自身的信息,自己能看到自己,就像照镜子一样。 二、Java 反射机制常见方法介绍。 1、Java反射实现的关键点之Class   Class 类的实例表示正在运行的 Java 应用程序中的类和接口。jvm中有N多的实例,每个类的实例都有Class对象。(包括基本数据类型)   Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。   如果知道一个实例,那么可以通过实例的“getClass()”方法获得运行实例的Class(该类型的字节码文件对象)