相关推荐
-
利用反射实现类的动态加载
利用反射实现类的动态加载
-
Java 动态代理
1、最简单的动态代理例子 使用动态代理的基本要素:首先需要有一个写好的动态代理工具类,然后要有个接口和对应的实现类, 1、动态代理工具类 package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** 代理类:帮助我们做一个被代理的业务对象返回。 java.lang.reflect.Proxy:这是 J
-
java合理估算线程池大小——Dark Magic
具体见并发编程网的文章http://ifeve.com/how-to-calculate-threadpool-size/, 原代码乱序了,这里做一个排序后分享 github地址: https://github.com/sunshanpeng/dark_magic
-
Java中的动态类加载详解
今天我们将深入探讨Java中的动态类加载,这是一种在运行时加载类文件的重要机制。动态类加载通过反射和自定义类加载器机制,使得程序在运行时可以根据需要动态加载和使用类,提高了应用程序的灵活性和可维护性。Java中的动态类加载能够使程序在运行过程中动态地装载、链接和初始化类,从而增强程序的灵活性和可扩展性。除了Java标准库提供的类加载器外,我们还可以自定义类加载器来实现更灵活的动态类加载需求。在Java中,实现动态类加载主要依赖于Java的反射机制和类加载器(ClassLoader)机制。
-
java工厂模式加策略模式实现动态选择类例子
1.工厂模式加策略模式实现动态选择类 /** * 退款实现接口 */ public interface RefundIdentifyService { CommonNotify toRefund(RefundModel refundModel); } //支付宝退款实现 @AllArgsConstructor @Service public class AliIdentifyService implements RefundIdentifyService { private
-
Spring动态选择实现类
一、需求描述 在实际工作中,我们经常会遇到一个接口及多个实现类的情况,并且在不同的条件下会使用不同的实现类,那么如何动态选择某一个实现类呢。 二、代码实现 1.根据ApplicationContext的getBeansOfType和自定义注解实现 spring上下文工具类ApplicationContextUtil import org.springframework.beans.BeansException; import org.springframework.context.Appli
-
java 动态指定方法_spring如何动态指定具体实现类
在写接口实现时,有时会有多个实现类。这篇文章介绍在调用时通过传入字符串来指定具体的实现类。一.接口与实现类:// 接口public interface ServiceInterface {public void method();}// 具体两个实现类@Service("aService")public class AServiceImpl implements ServiceInterface ...
-
java 动态创建类_Java实现动态创建类操作示例
本文实例讲述了Java实现动态创建类操作。分享给大家供大家参考,具体如下:Java可以创建动态类,学习看到,此处作为笔记。代码如下:import java.io.IOException;import java.lang.reflect.Method;import java.net.URI;import java.util.ArrayList;import java.util.Arrays;impo...
-
Java动态加载类
今天上课讲了Java中的一些反射知识。 随便练习了一下。 学生类: public class Student { public static int number; static { number = 0; } public Student() { } private String studentName; public String getStudentName() { return student
-
《Java核心技术面试精讲》24讲学习总结
第24讲心得 该讲介绍了哪些方法可以在运行时动态生成一个 Java 类。 我们可以从常见的 Java 类来源分析,通常的开发过程是,开发者编写 Java 代码,调用 javac 编译成 class 文件,然后通过类加载机制载入 JVM,就成为应用运行时可以使用的 Java 类了。从上面过程得到启发,其中一个直接的方式是从源码入手,可以利用 Java 程序生成一段源码,然后保存到文件等,下面就只需要解决编译问题了。有一种笨办法,直接用 ProcessBuilder 之类启动 javac 进程,并指定上面生
-
java动态类加载_实现Java动态类载入机制
作 为 充 分 利 用Java 的 动 态 类 载 入 机 制 的 最 好 例 子, 带 有Java 扩 展 的Web 浏 览 器 根 据 请 求 从 网 络 或 本 地 文 件 系 统 中 动 态 加 载Java applet( 遵 循 一 定 规 则 的Java 小 应 用 程 序 类), 然 后 在 本 地 系 统 中 执 行 它, 大 大 增 强 了 主 页 的 功 能。---- 其 实,...
-
Java动态调用类的方法案例
一、场景 需要根据编号动态给类设置值,属性名为“f+费用编号”,例如f01表示编号为01的费用 public class MonitorDayFee implements Serializable { private static final long serialVersionUID = 1L; private Long dayFeeId;//主键 privat...
-
Java动态类加载
Java动态类加载 文章首发自: https://www.le1a.com/posts/9d41d3f8/ 前言 前面学习了反序列化,正准备趁热打铁去学cc3了,但是发现cc3需要用到动态类加载,就先来学一下。 利用URLClassLoader加载远程class文件 首先了解下什么是ClassLoader? ClassLoader是一个"加载器",它会让Java虚拟机知道如何加载这个类。默认的ClassLoader是根据类名来加载类的,这个类名必须是类的完整路径(跟反射有点类似),例如java.lang.R
-
Spring中动态选择实现类
在spring中当一个接口有多个实现类的时候,通过创建简单工厂类,根据传入的不同的参数获取不同的接口实现类。 public interface ExecuteService { ExecuteEnum getCode(); // 业务方法 void execute(); } @Service public class FirstExecuteServiceImpl imp...
-
Java反射之一——动态加载机制
Java程序的运行过程的一个简单的示意图如下: 首先,ClassLoader将xxx.class文件加载到code segment中,然后找到main()函数开始执行,在程序运行过程中,会有更多的class被load到内存。需要注意的是需要一个类时再加载一个类,而不是事先就加载所有的类。这叫做动态加载机制。 public class Reflection { public st...
-
java动态加载类_Java:类的动态加载
package com.biao.util;import java.io.File;import java.net.URL;import java.net.URLClassLoader;import com.biao.ActionInterface;/*** 使用URLClassLoader动态的加载Class类和jar包中的类. 这样,可以把这些类路径放在配置文件中,动态的加载.*/public...
-
Java中实现动态加载类?
一、案例引入: 假如某项目组要开发一款Office平台, 里面有Word模块和Excel模块, 你负责的部分是启动程序,即: 当键盘输入"Word"时,启动Word 当键盘输入"Excel"时,启动Excel 你写完代码,但是并不能运行, 因为, 你并没有拿到其他人所写的Word类和Excel类 ...
-
java 动态加载类
一、什么是动态加载类动态加载:通过Class.forName的方式来得到一个Class类型的实例,然后通过这个Class类型的实例的newInstance来初始化,这种方法我们称之为动态加载程序在运行时调用相应方法,即使其他方法是错误的,程序依旧会执行。通过动态加载可以让程序的可延长性大大提升,对以后的维护和扩展有重要意义。Class c = Class.forName("com.mianshi.t
-
java 通过代码实现动态选择数据源
类注解 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.Retentio
56 楼 clarkcc1988 2008-10-27 10:27
55 楼 flykete 2008-09-09 23:11
后面几条,纯属吃饱撑着的。尤其第二条,当业务量大时,用navigate视图,看晕自己了。
54 楼 withinsea 2008-09-03 22:26
53 楼 zhaoyun04420 2008-08-22 16:51
52 楼 zmxt2008 2008-08-15 10:14
51 楼 echenyin 2008-08-13 12:25
第二条很有意思,从中发现了自己对于设计上了解的许多缺点
第三条听不懂
第四条没必要
50 楼 lihuyu1231 2008-08-12 09:13
但是在不发生歧义的情况下问题都不大,但是命名要有意义这才是最重要得。
个人认为作者自己 第一条修改后得例子实在是不怎么样,
方法调用的时候,特征性的参数重要是参数的类型,一些标志性的参数则是要有意义。
49 楼 sunsong 2008-08-10 13:46
java命名习惯中,参数命名是最大的问题。
参数,作用域仅仅在方法内部,完全应该跟field区分开来,这样在维护代码的时候一目了然。
还有一个很常见的潜在威胁,那就是setter的默认生成方式:
public void setUsername(String username){
this.username = username;
}
这里,很容易出问题。一旦this.username前面的this忘记写了, 或者被人删掉了,很难发现。
匈牙利命名方式的主要问题在于类型,而不是变量的用途。
而且,现在的ide重构功能都很强大,如果有变化,重构也很方便。
在粗粒度上把参数、变量、成员分开,完全是应该的。
48 楼 sunsong 2008-08-10 13:45
java命名习惯中,参数命名是最大的问题。
参数,作用域仅仅在方法内部,完全应该跟field区分开来,这样在维护代码的时候一目了然。
还有一个很常见的潜在威胁,那就是setter的默认生成方式:
public void setUsername(String username){
this.username = username;
}
这里,很容易出问题。一旦this.username前面的this忘记写了, 或者被人删掉了,很难发现。
匈牙利命名方式的主要问题在于类型,而不是变量的用途。
而且,现在的ide重构功能都很强大,如果有变化,重构也很方便。
在粗粒度上把参数、变量、成员分开,完全是应该的。
47 楼 FutureInHands 2008-08-05 18:23
46 楼 RednaxelaFX 2008-08-05 17:10
45 楼 RednaxelaFX 2008-08-05 17:07
这个标题给翻反了,也难怪读起来觉得别扭。作者是推荐使用不可变对象,反对到处用JavaBeans。
一个Java Bean在数据绑定或者GUI事件响应等场景中会涉及到事件与监听器。不过不提供任何事件的Java对象也可以是一个Java Bean,所以这点不是特别重要——毕竟如果是一个不可变对象的话,状态不可变,能有发出什么事件呢?自然就得到了“它多半与事件和监听器没啥关系”的论点。
话说这篇是楼主的原创对吧?看起来貌似被别处转载了?
P.S. 命名规范这种东西还是自己舒服就算了……
44 楼 fyting 2008-08-04 23:53
第二条是很好的建议,不过按照这个action,model,dao来分package的怕是网上spring的例子看多了吧。真正的项目一般都是先按照功能,再按照代码的行为来划分,也就是说先buyer,seller,再在这里面细分action,model,dao的package
第三条我实在看不懂他的标题和内容的联系。可变和不可变对象在于使用者,你不向数据库里取出的user对象故意setName他就是不可变的。还有顺便说说java这javabean规范真够恶心的,本来就是个语言层面的东西,偏要写一堆java.beans.*,纯粹脑袋进水的表现,我一直在想该用is还是has,getURL对应的property name是url还是URL或者uRL.
第四条,与第一条呼应了。如果代码编写者没用this引用实例变量,我还可以直接在类最前面找到这个变量。如果在类的最后面,我得翻几页,到最后去找它是个啥东西。想想看Core Java里代码的体验吧,很爽?
43 楼 keypoints 2008-08-04 23:33
42 楼 hulin 2008-08-04 16:48
41 楼 freemanxm84 2008-08-04 15:25
40 楼 zhaowei_520 2008-08-04 13:02
39 楼 sking002 2008-08-01 13:13
38 楼 Sunr∧se 2008-08-01 09:52
看到这个命名规范,让我想起了Delphi,但是我在用Delphi的时候一样遇到过问题。强制要求在参数前面+a,字段前面+f,有时候反而会带来意义的混淆。
例如,id,硬要改成fId吗?old,硬要改成fOld吗?那跟Fold的语义如何区分?
最大的故障在于Eclipse的自动生成getter/setter,如果按此命名,那就出现了getFid/setFid,isFold/setFold……
仅此一条,我大胆推测作者是否属于平常不写代码,只是看代码的人?建议不要总是站在高处指挥,偶尔还是需要写写代码练手。
也属于不写代码的人纸上谈兵的理论,看上去很美。
不是说把这些class放在一个文件夹下,这个模块就高内聚了。
# com.blah.buyer
# com.blah.seller
这样的分法当然有道理,但是我们还是喜欢在每个下面再分service/dao/model,而且JSP绝不会和这些文件混在一起,因为Web只是系统对外展现内容的一种渠道,如果系统还有一种对外渠道是Delphi开发的客户端,按这种意图,是否也要将Delphi的窗体文件也放到文件夹里,才表示高内聚?
这个就懒得批了,他直接把bean的概念都推翻了,那还有什么好说的,不如推翻J2EE规范另起炉灶好了。
作者不是第一个提这个的人,我也真的曾经在项目组内尝试过,但……毫无意义。
因为我自己都不觉得这有什么好处,而且我相信写了多年程序的人,都已经习惯了private/protected/public的从小到大排列?
如果说代码的排列顺序会影响虚拟机对函数的寻址速度,我倒是愿意坚持下去,但是实际上并非如此……而且现在找函数,谁会用pagedown?都在outline上面点的吧?
37 楼 rauldiego 2008-08-01 09:29