object

如何解决Transaction 注解,方法内部调用无效问题

被刻印的时光 ゝ 提交于 2020-02-26 00:04:11
前提: Transaction 注解开启事务,是通过代理对象对方法进行封装开启和关闭事务,但生效的的条件是外部调用,而内部调用并不会走代理对象,这就造成了事务失效。 解决办法: 1.逻辑优化,避免内部调用(自己评估) 2.通过AopContext.currentProxy()获取当前类的代理对象 ((ArticleService)AopContext.currentProxy()).getArticleById(id); 注意:需要设置 exposeProxy=true 配置方式: <aop:aspectj-autoproxy proxy-target-class="true"expose-proxy="true"/> 注解方式: @SpringBootApplication @EnableAspectJAutoProxy(exposeProxy=true) public class DatacenterApplication { public static void main(String[] args) { SpringApplication.run(DatacenterApplication.class, args); } } 3.手动获取bean @Component public class SpringUtils implements

C#装箱和拆箱

北城以北 提交于 2020-02-25 22:26:45
简单的说 装箱:值类型转成引用类型 拆箱:引用类型转成值类型 这里就执行了装箱和拆箱操作。 Box 和 Unbox 的解释参考官网: Box官网注释 Unbox 官网注释 说说装箱 的步骤: 0、将值入栈,(注意,不管这个值是在堆,还是在栈,还是在哪里,都需要先将值入栈) 1、在托管堆中分配内存。分配的内存量是值类型各字段所需的内存量,还要加上类型对象指针和同步块索引所需的内存量 2、 把入栈的值,弹出栈,复制到新分配的堆里 3、返回对象地址,把地址入栈 注:两个开销字段—— 类型对象指针和同步块索引,所需的内存在32位应用程序上需要4+4=8个字节,64位上是16字节 看看例子: object obj = 3;装箱步骤 0、 它是先将值 3 入栈 1、在托管堆中分配内存,在32位应用上是 4(int所需的内存) + 8 = 12个字节 2、把3弹出栈,并复制到新分配的内存堆里 3、把新地址入栈 在申请堆空间的时候,有可能会触发 GC 。 注意, obj 那个 3 和入栈那个 3 不是一个东西了。看如下代码的输出: 修改了 i ,但是 obj 的值依然是 3. 下面看个例子: int i = 3; object obj = i; Console.WriteLine(i + ", obj: " + (int)obj); 这个代码会进行三次装箱,因为字符串的 + 用的是 String:

js中对象常用方法

久未见 提交于 2020-02-25 22:12:25
Object.assign() … 用于克隆 var first = { name : 'kong' } ; var last = { age : 18 } ; var person = Object . assign ( first , last ) ; console . log ( person ) ; //{name : 'kong', age : 18 Object.is() …用于判断两个值是否相同 Object . is ( a , b ) ; //返回true或false //注意,该函数与==运算符不同,不会强制转换任何类型, 应该更加类似于 === ,但值得注意的是它会将 + 0 和 - 0 视作不同值 Object.keys() …用于返回对象可枚举的属性和方法的名称 var a = { name : 'kong' , age : 18 , func : function ( ) { } } ; Object . keys ( a ) ; //['name', 'age', 'func'] Object.defineProperty() …劫持变量的set和get方法,将属性添加到对象,或修改现有属性的特性 var a = { } ; Object . defineProperty ( a , 'name' , { value : 'kong' ,

HTMLDOM是什么?

霸气de小男生 提交于 2020-02-25 19:37:11
HTMLDOM 1.什么是HTMLDOM? HTMLDOM提供处理HTML文档的API。 2.W3CDOM与HTMLDOM的区别 W3CDOM可以处理HTML/XML文档; HTMLDOM仅能处理HTML文档。 3.获取对象 HTMLElement document.getElementById(string id) 4.访问HTML对象的属性 object.属性名称 = 值 [var 变量名称 = ] object.属性名称 说明: A.HTML标记的属性即HTMLDOM节点的属性。 B.如果HTML标记的属性为合成词,在HTMLDOM中应采用"驼峰标记法"命名。 C.HTML标记的class属性,在HTMLDOM中应使用className取代。(因为class是ECMAScript预保留的关键字) D.HTML标记的style属性,在HTMLDOM中将返回 CSSStyleDecleration(或CSS2Properties)对象。 5.CSSStyleDecleration对象 访问CSS样式 CSSStyleDeclaration.属性名称 = 值 [var 变量名称 = ] CSSStyleDeclaration.属性名称 = 值 说明: A.如果CSS样式为单个单词,则在CSSStyleDeclaration对象中直接书写。 B.如果CSS样式带有短横线

java的代理和cglib的代理

北城以北 提交于 2020-02-25 19:15:03
动态代理:随用随加载 1.基于接口的动态代理 使用jdk提供:Proxy 中的newProxyInstance()的方法 * 要求:被代理实现一个类,否则不能使用 * newProxyInstance()方法的参数 * ClassLoader 用于加载代理对象的字节码,要求和被代理对象使用相同的类加载器 * interfaces, 让代理对象和被代理对象具有相同的方法 * InvocationHandler 提供增强的代码 * 有一个invoke方法 * proxy 代理对象的引用 * method 当前执行的方法 * args 当前执行方法所需的参数,和被代理对象有相同的返回值 //给出了main方法 public static void main(String\[\] args) { final Iproducer iproducer=new Producer(); Iproducer proxy= (Iproducer)Proxy.newProxyInstance(iproducer.getClass().getClassLoader(), iproducer.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method,

Object.defineProperty属性实现双向绑定

╄→гoц情女王★ 提交于 2020-02-25 18:58:22
什么是双向绑定? 1.当一个对象(或变量)的属性改变,那么调用这个属性的地方显示也应该改变,模型到视图(model => view) 2.当调用属性的这个地方改变了这个属性(通常是一个表单元素),那么这个对象(或变量)的属性也会改为最新的值 ,即视图到模型(view => model) 那么vue利用es5的defineProperty特性实现双向绑定的原理是什么呢? 例如: var person= {}; Object.defineProperty(person, "name", { value: '张三' }) console.log(person.name); // 张三 传参 第一个参数:要设置的目标对象(必填) 第二个参数:需要定义的属性或方法的名称(必填) 第三个参数:目标属性所拥有的特性。(descriptor)(必填) 三个参数都是必填项,重点介绍第三个参数 descriptor descriptor value:属性的值 writable:如果为false,属性的值就不能被重写, 只能为只读了 configurable:总开关,一旦为false,就不能再设置他的(value,writable,configurable) enumerable:是否可枚举(是否能在for...in循环中遍历出来或在Object.keys中列举出来) get:后面会重点讲解 set

NSNotificationCenter

前提是你 提交于 2020-02-25 18:17:16
一个NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,它实质上就是一个通知分发表。这个分发表负责维护为各个通知注册的观察者,并在通知到达时,去查找相应的观察者,将通知转发给他们进行处理。 本文主要了整理了一下NSNotificationCenter的使用及需要注意的一些问题,并提出了一些未解决的问题,希望能在此得到解答。 获取通知中心 每个程序都会有一个默认的通知中心。为此,NSNotificationCenter提供了一个类方法来获取这个通知中心: + (NSNotificationCenter *)defaultCenter 获取了这个默认的通知中心对象后,我们就可以使用它来处理通知相关的操作了,包括注册观察者,移除观察者、发送通知等。 通常如果不是出于必要,我们一般都使用这个默认的通知中心,而不自己创建维护一个通知中心。 添加观察者 如果想让对象监听某个通知,则需要在通知中心中将这个对象注册为通知的观察者。早先,NSNotificationCenter提供了以下方法来添加观察者: - (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id

Java 泛型编程

廉价感情. 提交于 2020-02-25 12:44:08
Java泛型 (generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新 集合类框架 中。对于泛型概念的引入,开发社区的观点是 褒贬不一 。从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多明显的错误。而从不好的地方来说,为了保证与旧有版本的兼容性,Java泛型的实现上存在着一些不够优雅的地方。当然这也是任何有历史的编程语言所需要承担的历史包袱。后续的版本更新会为早期的设计缺陷所累。 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List<Object>作为形式参数,那么如果尝试将一个List<String>的对象作为实际参数传进去,却发现无法通过编译。虽然从直觉上来说,Object是String的父类,这种类型转换应该是合理的。但是实际上这会产生隐含的类型转换问题,因此编译器直接就禁止这样的行为。本文试图对Java泛型做一个概括性的说明。 类型擦除 正确理解泛型概念的首要前提是理解类型擦除(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的

前端基础之JavaScript

一个人想着一个人 提交于 2020-02-25 12:38:47
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客户端执行的语言)。 Netscape(网景)接收Nombas的理念,( Brendan Eich) 在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言。Sun和Netscape共同完成,后改名叫JavaScript。 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript。 为了统一三家,ECMA( 欧洲计算机制造协会)定义了ECMA-262规范.国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。 ECMA-262 是 JavaScript 标准的官方名称。 ECMAScript 年份 名称 描述 1997 ECMAScript 1 第一个版本 1998 ECMAScript 2 版本变更 1999 ECMAScript 3 添加正则表达式 添加tru/catch ECMAScript 4 没有发布 2009

java线程的几种状态

橙三吉。 提交于 2020-02-25 10:52:07
jdk api中的描述: NEW 至今尚未启动的线程处于这种状态。 RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态。可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。 BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态。受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。 WAITING 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。 某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态: 不带超时值的 Object.wait 不带超时值的 Thread.join LockSupport.park 处于等待状态的线程正等待另一个线程,以执行特定操作。 例如,已经在某一对象上调用了 Object.wait() 的线程正等待另一个线程,以便在该对象上调用 Object.notify() 或 Object.notifyAll() 。已经调用了 Thread.join() 的线程正在等待指定线程终止。 TIMED_WAITING 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。 TERMINATED