尝试JavaFX开发

曾经有报道说JavaFX将使java在桌面开发上大有作为,感觉好像是很高端的样子,今天尝试了一下,界面对于自用的工具来说,本来也不多重要,只是一个简单的尝试 简单说下大致的步骤和一些思路,可能有错误。 javafx需要sdk支持,java7之后的都有的。设计思路是数据和代码分离,界面通过xml或json数据来描述,这样就把业务逻辑代码和界面实现代码分开了 一个简单的开发过程应该是这样的 1.使用JavaFX Scene Builder来绘制界面,保存为xml/json格式 画的话没啥要说的,了解一下基本的整体概念就行。 2.在eclipse里新建工程,可以是普通工程,将1中的文件放到资源目录,在代码里加载,然后界面就加载成功了。 逻辑代码,比如一个简单的按钮事件可以通过 来查找到id为paneRightBottom的元素,然后就可以通过对node添加事件监听器来完成一些功能了 主要想说的是: JavaFX和WPF其实思路是一模一样的,恰好WPF我也用过,感觉两个都没搞起来,虽然界面炫,然后我去维基看了下: 该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich Internet application(RIAs)。JavaFX期望能够在桌面应用的开发领域与Adobe公司的AIR、OpenLaszlo以及微软公司的Silverlight相竞争 已经7年了,用户数应该是非常少的,成熟的商业型产品也没几个,在尝试的过程中,我在stackoverflow,以及一些很不错的java博客上,大量查找基本也没有太多的信息,都是一些很浅的应用,包括stackoverflow上的回答数,基本还是能反映出来的,主要应用于RIA,而当前RIA已经出html5的天下了。SL早都不更新了,这种坑爹的所谓新技术。  Oracle还是好好把Swing搞好吧。。不建议尝试。  

[藏]隐藏在PNG图像元数据中的新iFrame注入攻击

这个攻击方式很旧了,但手法相当不错,来自乐嵌网 我们一直在努力保持领先的最新趋势,今天我们发现了一个非常有趣的事,这或者是我们之前没有发现,或者是刚发生的。 我们只能说这是新发现的。  我们都了解的iFrame注入攻击,对吧?  了解一个iFrame注入 今天的iFrame 是非常标准的HTML标记,它是在自己网页中嵌入其他网站内容的简单方式。 被几乎所有的浏览器支持和百万计的网站使用,使用AdSense吗? 那么你的网站中就有一个iFrame。 我知道这东西很好,然而总是福祸相惜。 今天的攻击,特别是当我们谈论路过式下载,首选是利用IFRAME标记。 它简单方便,只需简单的属性修改,攻击者可以稳妥的从另一个站点嵌入代码,并通过客户的浏览器不知不觉的加载。  像这样:  攻击者通常从其他网站嵌入的恶意文件,通常是一个PHP文件或类似的形式。 当然,这并不是唯一的方法,但是是最普遍的。 从检测和修复的角度来看,这往往很容易修复。  新的iFrame注入法 然而今天,我们发现一个有趣的iFrame注入类型。 它的特殊之处不是在iframe标签中嵌入的内容,而是它分发恶意软件的方式。 你会看到,攻击者将威胁隐藏在PNG文件中。 我几乎可以听到很多你的窃笑,PFF .. 这不是新的…. 但问题是在细节上我的朋友。  如下,iFrame加载了一个有效的文件,没有什么恶意,一个叫jquery.js的JavaScript文件。这一切看上去都很好。你要细细的找: 起初,很多人会说我们傻。 这些代码很好,没看见什么问题,对不对? 然后,我们注意到了这个小函数,loadFile()。 函数本身并不奇怪,但事实上,它是装载一个PNG-var strFile = ‘./dron.png。 你会被它惊讶良久,它才是一个真正的黑手。  自然,下一步就是好奇的打开dron.png文件。 会有什么可怕的事情发生吗?  噢,什么都没有,太无聊了,这纯粹是浪费时间。 但是,请等一下,我发现这里有个有趣的小循环。 嗯,这是确实挺奇怪的,这是一个解码循环。 为什么要一个循环的解码PNG文件呢?  作为一个优秀的研究人员,采取最简单的方式,我可以将它加载到简单的测试页上 并提取图像内容。搞定!  测试页上加载它之后这,我们获得了strData变量:  看到它在干嘛了吗? 它做了个iFrame注入,并把它嵌入到PNG的元数据中,像一个新的分配机制。  有两点需要特别注意了,它使用createElement做了一个iFrame标签**,**然后设置**elm.style.position.left 和 elm.style.position.top **属性的值为-1000px,把iframe放到可视区域之外。这些值都是负值,在浏览器中根本看不到。但是你知道谁能看到吗?只有浏览器和Google能看到。这就是下载驱动和搜索引擎感染(SEP)攻击的小伎俩。  最后我们在elm.src元素中发现了真正的威胁**。**  做的这么独特到底有什么用呢? 它尽力隐藏真正的威胁的水平是独特的。现在的杀毒软件不会解码图像元数据,直到JavaScript文件加载完毕就停止扫描。不会追踪cookie文件,对于攻击者来说,这太好了,使它们很难被发现。  记住一点,尽管我们这里谈论的是PNG文件,这些方法和概念也可以应用到其他类型图像中。重要的一点是:留意你的web 服务状态,了解哪些修改和未修改的文件并确保漏洞未被利用。  通常情况下,一些新的侦查和排障需要一定的时间。 现在我们的 网站恶意软件扫描器能发现它吗 ? 绝对可以!  不要笑了,朋友们! 原文:new-iframe-injections-leverage-png-image-metadata by Peter Gramantik

[笔记]写代码遇到的一些问题汇总下

本篇是用来填上一篇 挖下的坑的。 1.java调用webservice 有一些已有的webservice服务,由xfire生成发布,有些有参数,有些无参数,无参数的直接我直接使用org.codehaus.xfire这个包里的Client来动态生成客户端。然后调用就可以了。非常简单 但对于有参的,且是服务器自定义的类作为参数的时候,实在是搞不定。。不管是把自定义的类放到本地,包名一致,在invoke的时候生成这个对象还是其他什么方法。都无法完成。 最终换了直接发送soap报文来完成。dirty hack啊。如果你有一些好的方法希望不吝赐教。 解决方案来源自stackoverflow,因为stackoverflow现在国内好像有时候打不开。因此把代码贴过来。有疑问的话留言讨论。 2.Access restriction on class due to restriction on required library rt.jar? 报错 总么都感觉是环境问题,系统bug。解决如下: 进入project properties的 Build Path 设置里. 移除 JRE System Library 再添加回来,方法是: 选择 “Add Library” ,然后选择 JRE System Library. 3.SSHManager类报错:com.jcraft.jsch.JSchException: UnknownHostKey 我使用的一个SSHManager类如下: 报这个错是因为 连接这段代码里少了config.put(“StrictHostKeyChecking”, “no”);这段设置,这个是去掉了严格的安全检查,一般只用于测试目的。 4.navicat连接oracle数据库 之前使用PL/SQL操作Oracle数据库,使用Heidisql操作mysql数据库。。切换麻烦。而且PL/SQL搜索的时候中文有问题。于是打算使用navicat统一管理 方法是: 1.首先下载Instant Client 的32位版本和Navicat Premium 2.然后解压Instant Client,配置navicat 选择oci文件即可 然后新建oracle配置,选择basic模式,其他的根据你的数据库信息自己填写即可。  5.HttpClient的logger日志实在太多了 大人,实在太多了。看不过来啊。附赠一篇log4j配置文件详解 在log4j.properties文件中添加如下配置信息 log4j.logger.httpclient.wire.header=INFO log4j.logger.httpclient.wire.content=INFO log4j.logger.org.apache.commons.httpclient = INFO 最后附赠一些实用的工具 http://www.freeformatter.com/ 程序员必备。各类转换,包括转义工具,格式校验工具。效果很好。 流体力学理论与F1赛车的空气动力学1,2,3 什么雷诺数,伯努利方程,文丘里效应,当年木有好好学啊。这么高大上的东西果然还是有压力。

[笔记]写代码遇到的一些问题汇总上

今天大雪,天冷,不能出去玩了。把保存在pocket里的一些记录总结一下,太懒了。。下篇等我去了上海用我电脑写吧 1.java模拟https登陆 首先我要登陆,然后保存cookie,然后利用cookie来访问后续的网页,发包,处理包这样,然后,为了方便,我选择了 org.apache.http 这个库,典型的一个登陆场景应该是这样的,以后遇到问题一定先要去看官方的例子,别人给出的例子一般要么是不能用,要么是用的方法都是一些过时的,虽然能用,但看到警告还是不舒服。 但是,这个过程报了如下的错 google之,发现时访问https的原因。需要先安装对应站点的证书。这里要用到一个通用的java类,我贴下链接 编译这个工具类,然后执行java InstallCert <host>[:port] 会生成一个证书文件 然后在项目里通过 设置即可,你可以吧证书文件放到资源目录,就更好了。 2.java正则替换反斜线 我在某个地方需要把字符串里的所有反斜线替换成两个,我就写了 结果发现我还是too young,实际上, java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠 例如 要想替换成 必须这样替换: 原因如下: String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的, \\ ,java解析为\交给正则表达式, 正则表达式再经过一次转换,把\转换成为\ 也就是java里面要用正则来表示一个. 必须写成4个\ 如果要表示\,那就要写8个\ 所以如果写成: str1 = str1.replaceAll("\", “\\"); 就会报正则表达式的错误。 3.httpClient如何模拟表单上传文件 这个还是要去看官方例子,网上没找到,需要添加 org.apache.http.entity包 其他都和普通的post请求没啥区别了 4.json-lib的一个问题 在maven里添加了json-lib的依赖后,启动报错 missing net.sf.json-lib,但实际上这个我的确是加载进来了。去了SO,才知道,还需要知道classifier 依赖,把jdk的版本添加上就行。这个应该是我当时添加的时候没有去maven中央库填写造成的 5.maven生成可执行jar包 写好的工具要打包,需要在pom文件,(我用mave来管理)里添加如下的配置 然后在工程目录执行 就会在target目录生成jar包啦

前路月光

火影片头曲想知道中文,没找到翻译,于是译之,感谢@sepith  。 今夜月光 不知为何 比往日温柔 崎岖泥泞的来时路 何时才能有同行之人 我沉默 为即将而来的眼泪 泪水中努力 悲伤着变得更强 很多时候,伤痕累累 忘掉了痛苦 流过血泪 王者归来是使命所及 哪管一路秋叶萧萧 我仰望星空 孤独从来不是虚假的幻想 你的过去我无法参与 我想要的的是现在和未来 昨日月光 无论是明亮,还是黯淡 我用双手铸造 始于生而终于死 一定错过了 诸多美好 我的同伴 虽然时过境迁 可是,你住过的地方 经年难忘 如果你想对我说 我还是会在你身边 舍命相陪 很多时候,伤痕累累 星空暗淡 假使黎明 也悄然消失 我一定再一次 为了梦想努力拼搏 痛到难以承受 迷惘前路崎岖 我轻轻闭上双眼 感受月光温柔 前路相伴 岂敢轻易迷失 如果欺骗了内心 失去了自己 莫忘星空璀璨 凝视遥远的未来 固执地努力 很多时候,伤痕累累 忘掉了痛苦 流过血泪, 王者归来是使命所及 哪管一路秋叶萧萧 我仰望星空 真正强大的是 心怀梦想的人 有着爱的人

[藏]跨行清算系统的实现原理

本文来自God Is Coder,通过这篇文章我算是理解了跨行清算系统逻辑,非常非常好。 最近看了很多银联方面的清算系统的设计原理,对于跨行清算系统有了很大的了解,写这篇文章的目的是在于从一个程序员的角度去思考一个跨行清算系统的架构是如何实现的以及整个过程中我们有哪些思想是可以借鉴的。由于金融里面涉及到太多的专业名词,包括借贷,备付金,头寸,调拨等等,这里不会涉及到这些,取而代之的是以大家可以理解的概念去解释。 下面简单的介绍一下两种跨行清算系统的实现原理以及特点。一种跨清算系统是我们最熟悉的银联,还有一种是越来越流行的第三方支付系统,比较典型的是快钱。 首先来拿生活中的一个非常常见的例子来说明跨行清算的整个过程,这里面不涉及交易费等其他概念。 跨行取款流程 张三是工行的持卡人,他需要取现金,但是找不到工行的ATM机器,发现附近有建行的ATM机器,他只能去建行取款,整个过程就是跨行清算的过程,我们以这个场景为例,分析一下业务流程,具体交互流程见下面一张图。  工行持卡人张三在建行ATM机器取款100,ATM请求建行主机,由于是工行的卡,建行不识别,只能请求工行去处理,工行识别持卡人账户并扣款100,然后通知建行,建行则通知atm吐钱。 这里整个系统要解决两个问题: 1 建行如何与工行通信 2 建行和工行之间如何清算,如上图结果,工行欠建行100. 整个系统的分析基于以上两个问题,下面首先解决是通信问题  跨行通信的两种模式 我们先假设工行提供接口,只需要建行发送指约定格式的报文,即可于工行通信,这种相当于建行直接通过接口方式与工行通信。如果是这种方式,只能解决建行和工行的单向通信,如果工行和建行通信,则工行要发送建行指定的通信报文格式。可是大家想想,如果银行更多怎么办,下面是三家银行间的通信 当有三家银行的时候,通信链路就有3*2=6条,当银行越来越多的时候,这种点对点的通信变的越来越复杂,每新增一家银行,他要做之前银行都要做的很多重复性的劳动,这样的成本非常高,也不经济,那么必须出现一个网络,它能够接入所有的银行,新的银行只需要接入这个网络,就可以和其他所有的银行进行通信。 先把这个网络成为通信网络,这种通信网络有两种方式可以连接所有的银行 1 这个通信网络定义标准接口,所有的银行都必须实现这个通信网络定义的api,新的银行如果想要接入这个通信网络,必须实现通信接口约定的协议。简称公共接口模式 2 这个通信网络主动去连接所有的银行的接口,把所有银行的接口信息都接入里面,就像一个适配器,新的银行如果想要接入这个通信网络,这个通信网络必须主动联系银行,按照银行的接口协议实现通信,简称适配器模式。 下面一幅图演示了这两种模式的不同: 对于这两模式,主要博弈就在于谁强谁弱。显然第三方支付公司属于适配器模式,需要一家一家银行去接入,至于银联,个人认为应该是第一种模式,这种对于银联这种需要稳定的系统来说是最具有优势的。  跨行清算保证金模式 解决了通信问题,下面就看如何解决资金的清算问题。一种简单的方案就是工行在建行里面开设一个保证金账户,用这个账户去偿还在整个跨行交易中应付给建行的资金。  从上图来看,这种方案确实可行。只需要工行在建行里面放足额的保证金,就可以满足跨行的费用。但是这里面实际上存在非常多的问题, 1 如果银行越来也多,每个银行都要在其他银行存钱,太不经济了 2 保证金需要放多少资金?如果一直都没有发生跨行交易,工行就亏大发了 3 如果保证金不够怎么办?交易失败还是记应收款? 对于第一个问题假设银行越来越多,会导致工行需要在其他每个银行里面都开设保证金账户(见下图),是一个很不经济的方案。 说明这个在其他银行存保证金的方案是不可行的,和之前通信的问题一样,是不是可以把所有的银行保证金账户单独管理起来,统一放置在一起,方便各个银行之间的清算。我们暂时把这个系统称之为保证金系统。 保证金系统 保证金就是方便各个银行之间的清算,需要单独由一个系统进行管理,解决了跨行之间保证金存放的问题。每个银行只需要在保证金系统中存点钱就可以了。保证金系统也有两种模式。先看看比较好理解的第一种模式: 在这种模式下,银行先把一部分钱存放在保证金系统里面,同时银行内部建立一个虚拟账户,记录存放了多少钱,主要是方便对账,万一这个保证金系统钱算错了怎么办。你可以想象一下,银行是很小气的,为啥愿意把钱存放到这保证金系统里面,这部分钱干啥不好,能够银行这么干的只有国家了,这个系统就是央行的备付金管理系统。每个新增的银行都要存一份钱在这里。 另外一种方案是倒过来思考,既然没有牛逼的央行作支撑,那可以在每个商业银行都建立一个账户,用这个账户负责和银行进行清算。每新增一家银行,就在那个银行里面开一个保证金账户。 这两种方式有本质的不同,一个是银行把资金的一部分转出到保证金,银行建立虚拟账户和保证金里面真实的资金映射。一个是保证金系统把资金转出到各个银行,自己内部建立一个虚拟账户和银行中真实的资金账户进行映射。这个间接的银行了后续的对账机制,这里先不叙述。 所有的第三方支付公司跨行清算的流程都是第二种方式,只有国家级清算公司(比如银联)是第一种方式,这是一种资源和权力上的不平等,不过是可以理解的。 清算系统 保证金系统解决了保证金存放的问题,接下来就是解决如何清算的问题。假设保证金转账是实时的,就要面对上面说的问题,保证金不够的情况下,跨行交易是成功还是失败。这是一个业务上问题,有很多种解决方案,我们暂不说。从技术上来讲,如果每一笔交易都要保证金实时记账,那么保证金系统的负载太大,事务如何保证等等一些列的问题。所以一个最简单的方案就是:一天结算一次。 每天由一个系统记录这些跨行交易信息,汇总出来,统一记账。这样一天只需要调用一次保证金系统即可。那么整个清算过程则是下面的流程: 1 系统T日发生建行和工行的跨行交易100 2 清算系统T+1日汇总T日工行和建行之间发生的交易明细数据,并且发这些数据发给建行和工行进行确认   3 工行建行分别对明细对账确认之后,通知清算系统确认交易明细无误,清算系统开始清算,调用保证金支付系统转账。 4 清算完成之后,工行和建行分别获取保证金系统的真实金额和自身系统内部的映射账户进行余额对账。  清算中心最主要干得事情就是统计谁欠谁多少钱,以及触发保证金系统的调拨操作。  对账流程 对账包括两个部分,一个是跨行交易明细的对账以及保证金余额的对账。 首先要思考的是:对账是谁发起的 ? 这个是了解对账的本质。 我们举生活中的一个例子,我们把钱投资到一个人,那个人负责公司的日常运作。你肯定会主动了解公司的账务,因为那个是你的钱。对账的发起人也是如此,对于银联的清算过程,对账的发起者是商业银行,因为你把钱放在保证金系统里面,这是你的钱,你需要去关心这个的,银联可不关心这个。 对于另外一种保证金系统,把钱放在各个银行里面了,那么对账的发起者就是这个保证金系统维护者了。目前普遍的第三方支付公司都是这个模式,所以他要找各个银行要结果明细进行对账,确认自己的资金安全无误。  以上就是一个简单的跨行清算系统的雏形,从一个就简单的例子入手,说明一个清算过程。目前银联的第三方支付公司的清算过程大致如此,但是实现细节远比这个复杂。但是一个基本的清算系统的本质模型大体上是不会变的。当然这个只是对于同币种的清算,不同币种或者虚拟货币的清算会涉及到汇率的问题,这些就很复杂,有机会在研究一下,后续在分享。 PS:以上很多名词都是自己的随意写的,里面很多专业名词这里不提及,有兴趣的可以自己去了解。

[藏]Class.getResource和ClassLoader.getResource不同点

有一次遇到了,查了查。原文地址 Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。 Class.getResource(String path) 再来一个实例,假设有如下Project结构: 如果我们想在TestMain.java中分别取到1~3.properties文件,该怎么写路径呢?代码如下:  ※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。   Class.getClassLoader().getResource(String path) 如果有同样的Project结构 使用Class.getClassLoader().getResource(String path)可以这么写: public class TestMain { public static void main(String[] args) { TestMain t = new TestMain(); System.out.println(t.getClass().getClassLoader().getResource("")); System.out.println(t.getClass().getClassLoader().getResource("1.properties")); System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties")); System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties")); } }※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

Java动态代理实例

首先什么是代理? 我更喜欢另一种通俗的解释,官方的解释总是高度抽象的,等用了一段时间才能理解体会 那我们就得定义一个拦截器/执行处理器了。 这客户端咋用啊,老湿 看到没,通过Proxy类的newProxyInstance方法,传入类加载器,类接口,和这个处理器,我们就获得一个代理 执行结果是这样的 恩,电脑没死机,是这样的  

[藏]图文并茂详解Eclipse断点

本文转自:http://my.oschina.net/colorleaf/blog/176569 这个算说的比较清楚的了,虽然简单但是很有用。收藏一下。 详解Eclipse断点 大家肯定都用过Eclipse的调试的功能,在调试的过程中自然也无法避免要使用断点(breakpoint),但不知是否对Eclipse中各类断点都有所了解。本篇图文并茂地介绍了Eclipse中全部类型的断点,及其设置,希望对大家有所帮助。(2011.11.20) 1. 示例程序 BreakpointDemo是一个臆造的应用程序,只是为了便于讲解Eclipse中各类断点的使用罢了。其代码如下图所示, BreakpointDemo主要包含两个方法: [1]setValue,该方法根据指定的次数(count),对成员变量value进行赋值,值的范围为0-9的随机整数。 [2]printValue,该方法会调用setValue()对value进行赋值,并打印出value的值;但,如果value能被3整除,那么就会抛出IllegalArgumentException异常。 2. Line Breakpoint Line Breakpoin是最简单的Eclipse断点,只要双击某行代码对应的左侧栏,就对该行设置上断点。此处,对第20行代码设置上Line Breakpoint,如下图所示, 可以为Line Breakpoint设置一个条件,那么当程序运行到该断点时,只有满足设定的条件,才会被中断。右键点击第20行的断点,选择"Breakpoint Properties…" 在弹出的属性对话框中,勾选上"Conditional",然后在文本框中输入"count % 2 == 0"。 该条件表示,当程序运行到第20行时,只有当count为偶数时,程序才会被中断。细心地话,你会发现该断点的图标发生了改变,多了一个问号。 3. Watchpoint Line Breakpoint关注于程序运行的"过程",大家也常把使用这种断点的调试称为单步调试。但有时候,我们对程序的运行过程不太了解,可能也不太关心,不能确定在什么地方设置断点比较合适,而可能比较关注某个关键变量的变化或使用。此时,就可以为该变量设置一种特殊的断点–Watchpoint。在此示例,我们最关心的就是成员变量value的值,那么就可以为它设置一个Watchpoint,双击第9行代码对应的左侧栏就可以了。 使用在2中所提及的方法,查看该断点的属性, 默认地,当该变量被访问或它的值被修改时,程序都会被中断。但在本示例中,只希望当对value的值进行修改时程序才需要被中断,所以取消对"Access"的勾选。 这时,我们会发现原来的Watchpoin图标也有变化了。 4. Method Breakpoint 与关注对某个变量的访问与修改一样,我们也可以关注程序对某个方法的调用情况,即,可以设置Method Breakpoint。在此处,设置针对方法setValue的Method Breakpoint。同理,双击第11行代码对应的左侧栏即可。 仍然要查看该断点的属性。默认地,只勾选了"Entry",而没有勾选"Exit"。 这表示,当刚进入该方法(调用开始)时,程序会被中断;而,离开该方法(调用结束)时,程序并不会被中断。在本示例中,需要同时勾选上"Exit"。 点击OK之后,可以看到该断点的图标也有所改变。 根据这里的设置,当程序运行到第20行后会在第12行被中断,尽管这里没有显式的断点,但这就是setValue()方法的入口(Entry)。必须注意地是,程序在运行到第16行时不会被中断,尽管它看起来像是setValue()方法的出口(Exit)。实际上,程序会在第17行被中断,这里才是setValue()调用结束的地方。 5. Exception Breakpoint 如果,我们期望某个特定异常发生时程序能够被中断,以方便查看当时程序所处的状态。通过设置Exception Breakpoint就能达到这一目标。本示例故意在第23行抛出了IllegalArgumentException异常,我们期望程序运行到此处时会被中断。但我们不直接为此行代码设置Line Breakpoint,而是为IllegalArgumentException设置Exception Breakpoint。设置Exception Breakpoint的方法与其它类型断点都不同,它不能通过双击左侧栏的方式在代码编辑器上直接进行设置。点击Breakpoints视图右上角形如Ji的图标, 会弹出如下所示的对话框, 在其中选中IllegalArgumentException,并点击OK,这时一个Exception Breakpoint就设置好了。 小结 上述的Eclipse断点,我们在现实工作中肯定都有意或无意地使用过其中的几种,只是不一定十分了解内情罢了。使用好Eclipse的各种断点,可以把很好地帮助我们分析程序,定位问题。

Spring依赖注入

在Spring框架中,依赖注入设计模式主要用来定义对象之间的依赖,存在两种主要类型 1)setter注入(设置器) 2)constructor注入(构造器) 1.Setter注入 是最流行最简单的DI方法,通过一个setter方法来完成依赖。 例子: 一个有一个setter方法的Helper类 再写一个bean配合iwenjianshengming这些bean,并且通过property(属性)标签来设置依赖 看到了把。我们只需要一个setter方法把CsvOutputGenerator注入进去就行了 2.Constructor注入 这种方式是通过一个构造函数来完成依赖设置的 例子: 一个有着一个构造函数的Helper类 然后当然是一个bean配置文件了。通过constructor-arg标签来写依赖 该选哪个? 没有硬性规定,哪个合适就用那个,由于setter的简单性,一般还是setter用得多。