动态

动态代理设计模式,及实现原理

こ雲淡風輕ζ 提交于 2020-01-22 23:58:29
动态代理模式,前提还是代理模式,只是优化了静态代理的一些不足。 比如,静态代理在一对一关系出现时,创建的代理对象较多,代码量也大,可维护性就会稍差,在一对多的代理关系出现是,可扩展性就更差了。 而动态代理,就是在使用时,才去创建代理类和实例,这样就可以通过一个动态代理类解决创建多个静态代理的问题,更灵活了。 当然动态代理的缺点也是有的,就是相比静态代理直接调用目标对象方法,动态代理效率会低,因为它是通过反射机制,间接调用目标方法的。 所以,在讨论动态代理前,需要先说说静态代理,及反射。 先说反射,通常对一个类对象执行操作时,都要先知道它是什么类,是做什么的,然后去实例化 对象进行操作。 但是,反射则是一开始不知道要初始化的类是什么,无法使用new关键字来创建对象。而是在运行时才知道要操作的类是什么,可以在运行时获取类的完整构造,并调用对应的方法,访问属性。 那反射跟运行时类信息(RTTI)有什么区别呢? 运行时类型识别(Run-Time Type Identification),使得可以在程序运行时发现和使用类型信息。 Java有两种方式可以让我们在运行时识别对象和类的信息,一种是RTTI,它假定在编译时已经知道了所有的类型;另一种就是反射,允许在运行时发现和使用类信息。 RTTI的基本使用 package rtti; import java.util.Arrays; import

Unity3D:动态加载资源(Resources.Load与AssetBundle.LoadAsset)

纵饮孤独 提交于 2020-01-22 19:06:56
Unity3D动态加载一(Resources) 在Unity3D中Project视窗中创建文件夹:Resources。 将需要动态加载的文件放入其中,例如Texture,Sprite,prefab等等。 在脚本中调用API接口Resources.Load()相关接口即可。 例如: using UnityEngine ; using UnityEngine . UI ; public class LoadTest1 : MonoBehaviour { private void Start ( ) { Sprite sp = Resources . Load < Sprite > ( "Pic" ) ; //"Pic"是资源的名字 GameObject obj = Resources . Load < GameObject > ( "Prefab01" ) ; Instantiate ( obj ) ; } } 此种方式只能访问Resources文件夹下的资源。 Unity3D动态加载二 第二种方式就是使用AssetBundle(AssetBundle是一个资源的集合,可以是Unity3D所支持的任何资源格式)。 创建AssetBundle文件 从Project视图中选择要打包AssetBundle的资源。 在Inspector视图的最底部可以看到分配AssetBundle和变体的部分

MyBatis的动态SQL语句

走远了吗. 提交于 2020-01-20 22:28:59
文章目录 1. 动态SQL之<if>标签 2. 动态SQL之<where>标签 3. 动态SQL之<foreach>标签 4. MyBatis中的SQL片段 1. 动态SQL之<if>标签 我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果username不为空时还要加入用户名作为条件,这种情况在我们的多条件组合查询中经常会碰到。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> < mapper namespace = " com.joker.dao.IUserDao " > < select id = " findByUser " resultType = " user " parameterType = " user " > select * from user where 1=1 < if test = " username!=null and username != ' ' " > and username like #{username} </ if > < if test =

关于代理模式和装饰模式的一些思考

☆樱花仙子☆ 提交于 2020-01-20 12:54:01
文章目录 背景 代理模式概述 装饰模式概述 编程启示录 背景 笔者前几天看了一个面试题 “说一下什么是代理模式?”,于是回忆了一下这个设计模式,并结合一篇旧文 《理理 Java 开发中常见的设计模式》 ,温故了一下这个知识点。 十年前看了好多遍的设计模式,死活处于学了忘、学不会的状态;如今随便翻到的某个 Java 技术点,都能快速反应出它们的前因后果。时光如梭,毕业已经十年了,这大概算是进入了卖油翁纯熟的技艺阶段了吧! 代理模式概述 代理模式类图 。面向对象编程语言中,代理对象和委托对象都需要实现相同接口,同时代理对象关联一个真正的委托对象,客户端得到的是一个代理的引用,实则背后调用的是真正委托对象的方法: 代理类型。 对于有大量类需要代理的应用,这就是一种负担。一方面增加了工作量,而且还产生了大量相似的代理类,所以有了动态代理这个解决方案:不需要为每个类都创建一个代理类,只在需要使用代理的时候,通过反射机制动态地生成一个实现代理接口的匿名类的实例。代理的分类:动态代理和静态代理,即生成代理类的方式是什么。 动态代理的两种类型:JDKProxy 和 CGlib 两种,二者比对结果如下 类型 原理 特点 JDKProxy 运行时直接写Class字节码 生成代理类效率高,反射执行效率低 CodeGeneratorLibrary ASM框架写 Class 字节码 生成代理类效率低

动态添加元素演示

ε祈祈猫儿з 提交于 2020-01-20 11:24:55
一、演示案例 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:set var="ctx" value="${pageContext.request.contextPath }" /> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link id="easyuiTheme" rel="stylesheet" type="text/css" href="${ctx}/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${ctx}/easyui/themes/icon.css"> <script type="text/javascript" src="${ctx}/easyui/jquery.min.js"></script>

nginx配置实例-动静分离

耗尽温柔 提交于 2020-01-20 00:41:46
动静分离的理解 一般理解为将动态的请求和静态的请求分离开来。 动态请求:需要请求服务器访问数据库拿取数据的时候,这样的请求就是动态请求。 静态请求:就是html的页面还有css样式,以及一些图片还有js等资源,这些资源的获取不需要访问数据库就可以拿到。 nginx将动态的请求分配到tomcat进行处理。将静态的请求分配到静态的资源管理器进行处理。 处理方式: 就是将静态的文件独立成单独的域名,放在独立的服务器上面。 另一种就是将动态和静态文件混合在一起进行发布。通过nginx分开。 通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置。可以设置浏览器缓存过期时间,减少与服务器之间的请求和流量。 配置nginx访问到服务器的静态资源 在Linux服务上面创建一个文件夹用来存储静态的文件 在 / 目录下创建了一个data文件夹,里面存储了两个文件夹 images 和 www images里面存储了一张照片 www里面存储了一个html文件 修改nginx配置文件目录 /usr/local/nginx/conf/nginx.conf 启动nginx并且访问静态资源 http://192.168.11.3/images/demo.png http://192.168.11.3/www/a.html 来源: CSDN 作者: sofency 链接: https:

深入理解Java中的代理(Proxy)

岁酱吖の 提交于 2020-01-19 04:32:31
目录 1.代理的概念 2.代理的类型 2.1 静态代理 2.2 动态代理 2.2.1 动态代理需要的要素 2.2.2 创建动态代理的步骤 2.2.3 动态代理示例 引用: 1.代理的概念 代理模式为其他对象提供了一种代理以控制对这个对象的访问,具体实现包括两大类:静态代理和动态代理。Java动态代理机制的出现使得Java开发人员只需要简单地指定一组接口及委托类对象便能动态地获得代理类,并且其所生成的代理类在将所有的方法调用分派到委托对象上反射执行的同时,还可以对方法进行增强,这也正是Spring AOP的实现基础。 2.代理的类型 代理分为静态代理和动态代理 静态代理:在程序运行前,由程序员创建或特定工具类自动生成源代码并对其编译生成.class文件。 动态代理:程序在运行时期动态生成的指定类型对象的行为。 2.1 静态代理 静态代理需要3个部分,接口(要执行的事情)、实现接口的对象、一个代理对象 //功能接口 public interface PersonInterface { public void printName(); } //具体的对象 public class Person implements PersonInterface { private String name; private String tel; private int age; public

java静态代理和动态代理详解

你说的曾经没有我的故事 提交于 2020-01-18 14:28:26
目录 一、静态代理 二、动态代理 (一)JDK动态代理 (二)Cglib动态代理 (三)jdk动态代理和cglib动态代理的区别 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类(被代理类)预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 为了保持行为的一致性, 代理类和委托类通常会实现相同的接口 ,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也 可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间 ,从而在设计上获得了更大的灵活性。Java 动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。 代理,简单来说就是,代理类和委托类都实现相同的接口,代理类代替委托类去执行从相同接口中实现的委托类中的方法,而代理类在代替委托类去执行方法之前和之后可以进行其他相应的处理。 一、静态代理 特点:代理类和委托类在 编译期间 就已经确定好。 静态代理举例 /** * 静态代理: * 特点:代理类和被代理类在编译期间就确定下来 */ interface ClothFactory{ void produceCloth(); } //被代理类 class NikeClothFactory implements ClothFactory{ public