动态

aop动态代理底层实现模拟

让人想犯罪 __ 提交于 2020-02-13 03:59:21
UserDAO.java:目标方法 public class UserDAO implements IDAO{ @Override public void save() { // TODO Auto-generated method stub } @Override public void select() { // TODO Auto-generated method stub } } Proxy.java:代理类 import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.lang.reflect.Method; import javax.tools.JavaCompiler; import javax.tools.JavaCompiler.CompilationTask; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; public class Proxy { public static void main(String[] args) throws Exception { Object proxy=newProxyInstance();

动态编译

跟風遠走 提交于 2020-02-13 02:18:05
动态编译 1. 应用场景 ​ 可以编写一个在线评测系统,浏览器端写Java代码,上传到服务器进行编译和运行 ​ 服务器动态加载某些类文件进行编译 2. 两种做法 ​ (1) 通过 JavaCompiler 动态编译 ​ (2) 通过 Runtime 调用 javac ,启动新的进程去操作 ​ 下面对方法一进行讲解 ​ 假设有一个已经写好的.java文件存放在 c:/myjava/ 中 JavaCompiler compiler = ToolProvider . getSystemJavaCompiler ( ) ; int result = compiler . run ( null , null , null , "c:/myjava/HelloWorld.java" ) ; System . out . println ( result == 0 ? "编译成功" : "编译失败" ) ; ​ 执行过后在 c:/myjava/ 中可以发现多出了一个 HelloWorld.class 文件,说明编译成功 ​ 这个例子就说明了,用户在浏览器端进行输入,然后在服务器端通过 String 字符串等编写一个临时 文件,再通过该方法进行编译,不过在实际操作过程中,需要注意安全的处理 ​ 3. 通过 Runtime.getRunTime() 运行编译好的类 ​ 假设程序已经编译成功

oracle体系-14-数据字典

半腔热情 提交于 2020-02-13 01:38:24
什么是数据字典 1)Oracle提供了大量的内部表,它们记录了数据库对象信息。可以将这些内部表划分为两种主要类型: 静态的数据字典表和动态的性能表。 这些内部表是由oracle维护的,它们都是只读表。用户包括sys都不能修改,只能查看。 2)Oracle数据库字典通常是在创建和安装数据库时被创建的 11.2数据字典内容 1)数据库中所有模式对象的信息,如表、视图、簇、及索引等。 2)分配多少空间,当前使用了多少空间等。 3)列的缺省值。 4)约束信息的完整性。 5)Oracle用户的名字。 6)用户及角色被授予的权限。 7)用户访问或使用的审计信息。 8)其它产生的数据库信息 数据字典组成 1)数据字典表 :是Oracle存放系统数据的表。这些表属于SYS用户。用以存储表、索引、约束以及其他数据库结构信息,通常以$结尾,如tab$,obj$,ts$,aud$等。 2)内部表(X$) :Oracle的核心,官网不做说明, Oracle通过大量X$建立起大量视图,仅供用户select 3) 数据字典视图 :数据字典表上创建,通常分为三类dba_, all_, user_ 4)动态性能视图(V$) :实时更新反应当前实例的状态,官网对V$视图有详尽的说明。 实际工作中最常用的是数据字典视图和动态性能表: 广义概念中:v$也属于数据字典范畴。因为v

Spring-AOP

会有一股神秘感。 提交于 2020-02-12 21:11:09
AOP概述 1.什么是AOP: AOP就是面向切面编程,是Spring框架的核心。 2.AOP底层的实现原理: 动态代理分为: JDK动态代理:基于接口的动态代理 Cglib动态代理:基于类的动态代理 3.AOP作用: 在不更改源码的情况下,去动态的增强对象的一些功能 AOP相关术语 Spring的AOP的实现底层实现就是对于动态代理的实现的代码进行了封装,封装之后我们只需要对需要关注的部分进行代码编写,并且通过配置的方式完成指定的目标的方法的增强。 Target(目标对象):代理目标的对象 Proxy(代理):一个类被AOP织入增强后,就会产生一个代理的结构类 Joinpoint(连接点):指那些被拦截到的点,在spring中指的是方法 Pointcut(切入点):对于连接点进行确定的要被增强的方法就是切入点 Adivce(通知/增强):拦截到连接点后要进行的操作就被称为通知/增强 Aspect(切面):切入点和通知结合后就是切面 Weaving(织入):指把增强应用到目标对象来创建新的对象的过程 AOP开发需要明确的事项 需要编写的代码 编写核心业务代码(目标类的目标方法) 编写切面类,切面类中有通知 在配置文件中使切面类与目标类创建的Bean对象产生织入的关系 AOP会使用那种代理方式 AOP底层会根据创建的目标对象是否有接口而判断是使用JDK方式还是Cglib方式

java动态代理的实现以及原理

不羁岁月 提交于 2020-02-11 11:54:46
1.前言 之前对动态代理的技术只是表面上理解,没有形成一个体系,这里总结一下,整个动态代理的实现以及实现原理,以表述的更清楚一些。 2.动态代理的实现应用到的技术 1、动态编译技术,可以使用Java自带的JavaCompiler类,也可以使用CGLIB、ASM等字节码增强技术,Java的动态代理包括Spring的内部实现貌似用的都是这个 2、反射,包括对于类.class和getClass()方法的理解,Method类、Constructor类的理解 3、IO流,主要就是字符输出流FileWriter 4、对于ClassLoader的理解 3.动态代理示例 接口类: public interface UserService { public abstract void add(); public abstract void update(); } 接口实现类: public class UserServiceImpl implements UserService { public void add() { System.out.println("----- add -----"); } public void update(){ System.out.println("----- update-----"); } } 代理处理类MyInvocationHandler.java

动态给select设置默认值

自闭症网瘾萝莉.ら 提交于 2020-02-11 03:00:43
1、点击、方法中修改select默认值   方法一:$("#attendance").select2().val("1").trigger("change"); 2、笨方法,找到对应汉字显示,修改一下。   方法二:$("#liXiang a:first-child span:first-child").text(""); 来源: https://www.cnblogs.com/h-wei/p/11362915.html

CGLIB动态代理简介

余生颓废 提交于 2020-02-10 17:51:11
一:前序 一开始对动态代理都不懂,一直心里还是很惧怕这个概念,之前也学过,学过就忘了,现在想想之所以忘了,是因为平时在开发中也不会使用到动态代理,那回过头再想想,自己已经做了六年多的开发了,那为什么还要学习这个了,今天想想也许就是技多不压身,其实只有知道的多了,才会在用到的时候,用起来,我想也有种说法是用到的时候再学也可以,但是在平时的开发中,我们很少会用到,可能是我们不知道动态代理,如果知道也许会在平时中使用它。之所以今天想做个总结是想到动态代理还是有很大的用处,只是我之前不知道。 二:CGLIB介绍 下面做个总结,动态代理里面有两种方式,一种是jdk的动态代理,一种是cglib动态代理,这里做个cglib动态代理,jdk的动态代理,将单独写个专题来介绍 CGLIB是一个强大的高性能的代码生成包,CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类,当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉,在引入cglibjar包后,也会导入ASMjar包 三:CGLIB实现 springboot支持的事务方式:@EnableTransactionManagement 在启动方法入口的类中添加 spring支持方式 :<aop:aspectj-autoproxy proxy-target-class=

动态代理

╄→гoц情女王★ 提交于 2020-02-10 17:30:52
一:什么是动态代理?为什么要用动态代理?   在开发中,有时候会发现先前写好的类中的某个方法的原有功能不够用,需要增加额外功能。但是修改源代码增加功能是开发大忌,不到万不得已时不能这样做,这时候就需要动态代理来帮忙了。   动态代理就是设计模式中的代理模式   二:动态代理概念:   1. 真实对象:被代理的对象   2. 代理对象:对真实对象的功能(方法)进行   3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 三:实现步骤:   1. 代理对象和真实对象实现相同的接口   2. 代理对象 = Proxy.newProxyInstance();   3. 增强方法   4. 使用代理对象调用方法。 四:代码实现:   需求:computer对象里有个sell方法,里面实现了卖电脑的原始功能,现在想在sell方法里增加打八折的功能       1. Proxy.newProxyInstance方法的三个参数:                       1. 类加载器:真实对象.getClass().getClassLoader()                       2. 接口数组:真实对象.getClass().getInterfaces()                       3. 处理器:new InvocationHandler()  

linux 动态、静态的查看进程内存占用

让人想犯罪 __ 提交于 2020-02-09 19:38:14
动态查看一个进程的内存使用 1、top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 根据内存使用量排序 shift + m 根据cpu使用量排序 shift+p 静态查看一个进程的内存使用 1、pmap命令 pmap pid 2、ps命令 ps aux|grep process_name 3、查看/proc/process_id/文件夹下的status文件 来源: https://www.cnblogs.com/eret9616/p/12288277.html