??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜精品国产电影在线观看,亚洲AV成人一区二区三区观看 ,亚洲av区一区二区三http://www.tkk7.com/charles/category/36935.html以JEEZ攻,以Flex为点~Q以Eclipse RCPZ?/description>zh-cnMon, 04 May 2009 00:54:09 GMTMon, 04 May 2009 00:54:09 GMT60Platform UI dialogs and JFace dialogs囄?qing)用?/title><link>http://www.tkk7.com/charles/archive/2009/04/29/268256.html</link><dc:creator>suprasoft Inc,.</dc:creator><author>suprasoft Inc,.</author><pubDate>Wed, 29 Apr 2009 15:10:00 GMT</pubDate><guid>http://www.tkk7.com/charles/archive/2009/04/29/268256.html</guid><wfw:comment>http://www.tkk7.com/charles/comments/268256.html</wfw:comment><comments>http://www.tkk7.com/charles/archive/2009/04/29/268256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/charles/comments/commentRss/268256.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/charles/services/trackbacks/268256.html</trackback:ping><description><![CDATA[ <img src ="http://www.tkk7.com/charles/aggbug/268256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/charles/" target="_blank">suprasoft Inc,.</a> 2009-04-29 23:10 <a href="http://www.tkk7.com/charles/archive/2009/04/29/268256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TitleAreaDialog/TrayDialoghttp://www.tkk7.com/charles/archive/2009/04/29/268255.htmlsuprasoft Inc,.suprasoft Inc,.Wed, 29 Apr 2009 15:09:00 GMThttp://www.tkk7.com/charles/archive/2009/04/29/268255.htmlhttp://www.tkk7.com/charles/comments/268255.htmlhttp://www.tkk7.com/charles/archive/2009/04/29/268255.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/268255.htmlhttp://www.tkk7.com/charles/services/trackbacks/268255.htmlDialog是SWT和JFace的一个重要的l成部分Q我们在开发Plug-in或RCP的时候也l常?x)用到它们。这随W不?x)介l?SWT的DialogQ因为我惛_多h都已l非常熟(zhn)它了。在q里Q我要讨论的是JFace的DialogQ或者更q一步说是JFace?TitleAreaDialog。什么是TitleAreaDialog呢?x我们常常用到的New XX Wizardq道了。在我们创徏一个Java Project或Class的时候,我们所使用的Wizard其实是由TitleAreaDialog构成的。这UDialog有如下所C的 TitleArea和一个标准的Button BarQ?br />
      
                                    正常的TitleArea                                                                                                               带有错误信息的TitleArea


                                    标准的Button Bar

q种GUI的表现力要比SWT的Dialog强很多,而且JFace Dialog装了很多东西,q也使开发工作变得更加简单,所以我极力推荐使用TitleAreaDialog。那么让我们来看一个最基本?TitleAreaDialogQ?br />
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.jthin.jpssp.ide.configuration.Activator;

public class MyTitleAreaDialog extends TitleAreaDialog {

    
/**
     * Create the dialog
     * 
     * 
@param parentShell
     */

    
public MyTitleAreaDialog(Shell parentShell) {
        
super(parentShell);
    }

    
/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */

    
protected Control createDialogArea(Composite parent) {
        Composite area = (Composite) 
super.createDialogArea(parent);
        Composite container = 
new Composite(area, SWT.NONE);
        container.setLayoutData(
new GridData(GridData.FILL_BOTH));

        
// TitleArea中的Title
        setTitle("My TitleAreaDialog");

        
// TitleArea中的Message
        setMessage("This is a simple TitleAreaDialog example.");

        // TitleArea中的Image
        setTitleImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/Neptune.png"));

        
return area;
    }

    
/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
     */

    
protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, 
false);
    }

    
/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.TitleAreaDialog#getInitialSize()
     */

    
protected Point getInitialSize() {
        
return new Point(500, 375);
    }

    
/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */

    
protected void configureShell(Shell newShell) {
        
super.configureShell(newShell);

        
// Dialog Title
        newShell.setText("Test TitleAreaDialog Title");

        
// Dialog Icon
        newShell.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/Neptune.png"));
    }

}

q段代码非常Ҏ(gu)理解Q从Ҏ(gu){֐中可以看出每个方法做了什么事情。注意createButtonsForButtonBarҎ(gu)Q其中用createButtonҎ(gu)创徏了OK和Cancelq两个ButtonQƈ且把Button的默认点M件也写好了,是关闭?Dialog。ResourceManager.getPluginImage是我自己~写的获得图片的helper methodQ这里就不讨论其实现了。这D代码会(x)产生如下的DialogQ?br />


有趣的是Q我在这里故意用了一?28×128的大图标Q?TitleAreaDialog不会(x)自动~小或裁减ImageQ而是调整TitleArea的大来适应Image?br />
接下来我们要为OK Button~写我们自己的事Ӟ例如把用户在Dialog中的输入保存到某处。有人可能会(x)惛_为OK ButtondSelectionListenerQ但实际上这样做是不对的Q因为OK Button是JFace为Dialog装好了的,同时JFace也提供了响应的callbackQ?br />
/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 
*/
protected void okPressed() {
   
// implement your own function here
    super.okPressed();
}

我们可以在这里实现我们自q事gQ不q最后一定要调用super.okPressedҎ(gu)Q否则Dialog׃?x)关闭了?

OKQ以上就是TitleAreaDialog的基本F(xin)rameworkQ非常容易理解,下面我们来?TitleArea中动态设|一些信息。你可以把这个scenario惌成在用户输入的同时提C用戯入的合法性。TitleAreaDialog提供了好3个方法可以动态设|TitleArea信息Q具体如下:(x)
  • public void setErrorMessage(String newErrorMessage)Q显CZ入的错误信息。(我们把用q个Ҏ(gu)讄的信息叫做error message。)当前昄的信息会(x)被保存v来,{到error message清空之后?x)再ơ显C,而清Ierror message要传入nullQ而不是传入空字符丌Ӏ?br />
  • setMessage(String newMessage)Q显CZ入的信息Q等同于setMessage(String newMessage, IMessageProvider.NONE)。如果当前显C的是error messageQ那么newMessage?x)被保存hQ等到error message清空后再昄?br />
  • setMessage(String newMessage, int newType)Q显CZ入的信息Qƈ昄指定的信息类型。可用的cd有NONE、INFORMATION、WARNING和ERROR。需要注意的是, setMessage(String newMessage, int IMessageProvider.ERROR)和setErrorMessage(String newErrorMessage)q不相同。后者会(x)覆盖当前的Q何信息,而前者只?x)覆盖当前的非error messageQ不?x)媄响到error messageQ也是说当error message清空后才?x)显C)?br />
q样Q我们就可以Z些文本框dModifyListenerQ然后在其中讄TitleArea的信息了?br />
接着Q再让我们来看看Button Bar。有些时候,我们希望把OK和Cancelq种默认的Button攄在Button Bar的右侧,而把其他Button攄在Button Bar的左侧,如下图中的Customize... ButtonQ?br />


q又如何实现呢?有h可能惛_?createButtonsForButtonBarҎ(gu)中做一些手脚,但是遗憾的是q行不通,我们真正要覆写的是createButtonBarҎ(gu)Q下面是一个简单的例子Q?br />
/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
 
*/
protected Control createButtonBar(Composite parent) {
    Composite composite 
= new Composite(parent, SWT.NONE);
    GridLayout layout 
= new GridLayout();
    layout.numColumns 
= 0;
    layout.marginHeight 
= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
    layout.marginWidth 
= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
    layout.verticalSpacing 
= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
    layout.horizontalSpacing 
= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);

    composite.setLayout(layout);
    composite.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));

   
if (isHelpAvailable()) {
        createHelpControl(composite);
    }

    createButton(composite, MyConstants.IMPORT_BUTTON_ID, 
"Import", false).addSelectionListener(new SelectionAdapter() {
       
public void widgetSelected(SelectionEvent e) {
            MessageDialog.openInformation(MaintainModuleDialog.
this.getShell(), "Information",
               
"\"Import\" button has not been implemented.");
        }
    });

    createButton(composite, MyConstants.EXPORT_BUTTON_ID, 
"Export", false).addSelectionListener(new SelectionAdapter() {
       
public void widgetSelected(SelectionEvent e) {
            MessageDialog.openInformation(MaintainModuleDialog.
this.getShell(), "Information",
           
"\"Export\" button has not been implemented.");
        }
    });

    createButton(composite, MyConstants.OTHER_BUTTON_ID, 
"Other"false).addSelectionListener(new SelectionAdapter() {
   
    public void widgetSelected(SelectionEvent e) {
            MessageDialog.openInformation(MaintainModuleDialog.
this.getShell(), "Information",
           
"\"Other\" button has not been implemented.");
        }
    });

    Label filler 
= new Label(composite, SWT.NONE);
    filler.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
    layout.numColumns
++;

   
super.createButtonsForButtonBar(composite);

   
return composite;
}

正如你所见,我们实际上创Z自己的Button BarQ然后在上面d?个ButtonQImport、Export和OtherQ最?super.createButtonsForButtonBar?x)创建OK和Cancel Button。filler是用来在两组Button见占位的。代码中用到的两个convertҎ(gu)来自 org.eclipse.jface.dialogs.Dialogc,你还可以在这个类中找C个getButton(int)Ҏ(gu)Q它可以Ҏ(gu)传入?IDq回用createButton创徏的Button。这些都是非常实用的Ҏ(gu)?br />
回头看一下上面那个完整的 TitleAreaDialog囄Q你?x)看到在Dialog左下角有一个问L(fng)Pq其实是一个ButtonQ点d可以昄帮助信息Q当然帮助信息是׃来创建的。让我们看看Eclipse Search的TitleAreaDialog中的帮助信息吧:(x)



如果我们也想实现q种帮助机制Q那么就要实现如下方法:(x)

/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.dialogs.TrayDialog#createHelpControl(org.eclipse.swt.widgets.Composite)
 
*/
protected Control createHelpControl(Composite parent) {
    // TODO Auto-generated method stub
    return super.createHelpControl(parent);
}

如果不想实现帮助机制Q那么最好不要在Dialog中显C出那个问号W号Q你可以覆写如下Ҏ(gu)q永q返回falseQ这样就不会(x)昄问号W号了?br />
/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.dialogs.TrayDialog#isHelpAvailable()
 
*/

public boolean isHelpAvailable() {
    return false;
}

那么q个酷酷的帮助机制到底是个什么东西呢Q实际上Q它的学名叫做DialogTray。TitleAreaDialogl承?
org.eclipse.jface.dialogs.TrayDialogc,而TrayDialog可以显CU?DialogTrayQ是不是有点儿拗口呢Q实际上Q我们不仅仅可以d帮助信息q一UDialogTrayQ还可以dL的DialogTrayQ现在就让我们动手实C个最单的吧。代码很单,最主要的就是要实现一个DialogTrayQ代码如下:(x)

import org.eclipse.jface.dialogs.DialogTray;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

public class MyDialogTray extends DialogTray {

    
/*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.DialogTray#createContents(org.eclipse.swt.widgets.Composite)
     
*/
    
protected Control createContents(Composite parent) {
        Composite container 
= new Composite(parent, SWT.NONE);
        
final GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns 
= 2;
        container.setLayout(gridLayout);

        
final Label label = new Label(container, SWT.NONE);
        label.setText(
"Name:");

        
final Text text = new Text(container, SWT.BORDER);
        text.setLayoutData(
new GridData(SWT.FILL, SWT.CENTER, truefalse));

        
return container;
    }

}

我们只在其中创徏了一个Label和一个TextQ这p够了。最后,我们为MyTitleAreaDialogd两个ButtonQ用来打开和关闭MyDialogTrayQ代码如下:(x)

final Button openTrayButton = new Button(container, SWT.NONE);
openTrayButton.setText(
"Open Tray");

final Button closeTrayButton = new Button(container, SWT.NONE);
closeTrayButton.setText(
"Close Tray");
closeTrayButton.setEnabled(
false);

openTrayButton.addSelectionListener(
new SelectionAdapter() {
    public void widgetSelected(final SelectionEvent e) {
        // this method is from TrayDialog
        openTray(new MyDialogTray());
        openTrayButton.setEnabled(
false);
        closeTrayButton.setEnabled(
true);
    }
});

closeTrayButton.addSelectionListener(
new SelectionAdapter() {
   
public void widgetSelected(final SelectionEvent e) {
       
// this method is from TrayDialog
        closeTray();
        openTrayButton.setEnabled(
true);
        closeTrayButton.setEnabled(
false);
    }
});

最后我们会(x)得到如下对话框:(x)



好了Q就讲这么多吧。如果能把这些东东适当地用在你的Application中,那么效果一定非常棒?/span>


suprasoft Inc,. 2009-04-29 23:09 发表评论
]]>
eclipse中plug-in spy功能http://www.tkk7.com/charles/archive/2009/02/12/254454.htmlsuprasoft Inc,.suprasoft Inc,.Thu, 12 Feb 2009 14:03:00 GMThttp://www.tkk7.com/charles/archive/2009/02/12/254454.htmlhttp://www.tkk7.com/charles/comments/254454.htmlhttp://www.tkk7.com/charles/archive/2009/02/12/254454.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/254454.htmlhttp://www.tkk7.com/charles/services/trackbacks/254454.html
从eclipseworld打听到的Q赶紧记?

suprasoft Inc,. 2009-02-12 22:03 发表评论
]]>
Eclipse UI和JDT UI中几个重要的对话?/title><link>http://www.tkk7.com/charles/archive/2009/02/11/254305.html</link><dc:creator>suprasoft Inc,.</dc:creator><author>suprasoft Inc,.</author><pubDate>Wed, 11 Feb 2009 11:55:00 GMT</pubDate><guid>http://www.tkk7.com/charles/archive/2009/02/11/254305.html</guid><wfw:comment>http://www.tkk7.com/charles/comments/254305.html</wfw:comment><comments>http://www.tkk7.com/charles/archive/2009/02/11/254305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/charles/comments/commentRss/254305.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/charles/services/trackbacks/254305.html</trackback:ping><description><![CDATA[     摘要: IContainer 中相对\径的选择文g对话框:(x)   import java.util.ArrayList;import java.util.List; import org.eclipse.core.resources.IContainer;import org.eclipse.core.resources.IProject;import org.ecl...  <a href='http://www.tkk7.com/charles/archive/2009/02/11/254305.html'>阅读全文</a><img src ="http://www.tkk7.com/charles/aggbug/254305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/charles/" target="_blank">suprasoft Inc,.</a> 2009-02-11 19:55 <a href="http://www.tkk7.com/charles/archive/2009/02/11/254305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Soad toolkit插gȝhttp://www.tkk7.com/charles/archive/2009/02/08/253820.htmlsuprasoft Inc,.suprasoft Inc,.Sun, 08 Feb 2009 13:32:00 GMThttp://www.tkk7.com/charles/archive/2009/02/08/253820.htmlhttp://www.tkk7.com/charles/comments/253820.htmlhttp://www.tkk7.com/charles/archive/2009/02/08/253820.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/253820.htmlhttp://www.tkk7.com/charles/services/trackbacks/253820.htmlq下l于把这个plugin做完了,最新增加了对Spring/Struts配置文g的Validation

其中有个很头疼的问题是,那就是无法读取打包好的插件jar中的xml文gQ最后没有办法,只好把这些xml文g分离出来不打包进去,而是攑ֈ了eclipse/plugins/目录下的一个文件夹中,q样利的解决了讉K问题。不知道有没有更好的办法

另一个问题是Q我使用xalandXLST transform,但是它{换完的xml节点是不带namespace前缀?/p>

而恰恰恼人的是,xalan的XPATH解析器selectSingleNode()是需要namespace前缀的,即使用的默认namespaceQ如<beans xmlns=

在做XPATH解析的时Q也需要带上前~Q如 :beans/:bean, 只有不声明Q何namespaceӞ才可以用beans/bean, 否则׃(x)抛异常,没办法解冻I



suprasoft Inc,. 2009-02-08 21:32 发表评论
]]>
Eclipse插g之Sring IDEhttp://www.tkk7.com/charles/archive/2009/02/04/253332.htmlsuprasoft Inc,.suprasoft Inc,.Wed, 04 Feb 2009 15:40:00 GMThttp://www.tkk7.com/charles/archive/2009/02/04/253332.htmlhttp://www.tkk7.com/charles/comments/253332.htmlhttp://www.tkk7.com/charles/archive/2009/02/04/253332.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/253332.htmlhttp://www.tkk7.com/charles/services/trackbacks/253332.html 本文介绍如何利用Eclipse插gSpring IDE在Eclipse中的使用?br />
  Eclipse是目前非常流行的开发^収ͼ开放扩展的架构让很多程序员扑ֈ了自׃性化的工作环境?br />
  问题提出Q?/strong>

  在采用Spring框架q行pȝ开发时QBean的配|文件XML的书写、XML文g的内Ҏ(gu)验及(qing)Bean之间的依赖关pL看等工作Q如果能够采用合适的工具来完成,?x)成倍提高开发效率?br />
  解决Ҏ(gu)Q?br />
  Spring IDE是Spring官方|站推荐的Eclipse插gQ可提供在开发Spring时对Bean定义文gq行验证q以可视化的方式查看各个Bean之间的依赖关pȝ?br />
  同时Q徏议结合Eclipse XMLBuddy插gq行XML文g~辑与校验,是个不错的选择?br /> 安装说明

  JDKQ?.5.0     ?a >http://java.sun.com上去下蝲安装

  EclipseQ?.1.2   ?a >http://www.eclipse.org 上去下蝲解压

  Spring 1.2.8    ?a >http://www.springframework.org 上去下蝲解压

  Spring IDE 1.3.2  ?a >http://springide.org 上去下蝲

  XMLBuddy 2.0.72  ?a >http://www.xmlbuddy.com/ 上去下蝲

  Spring IDE 1.3.2 Update地址为:(x)http://springide.org/updatesite/

  理技?/strong>

  提示Q新下蝲的插件PlugIn一定不要都攑֜原始的Eclipse目录下去Q一大堆Q篏MQ(

  1. 前提是你已经下蝲解压q设|好Eclipse工具Q比如解压在E:\OpenSource\Eclipse\目录下,以下q个目录?ECLIPSE_HOME%来进行表C;
  2. 此时默认的插件是?ECLIPSE_HOME%\plugins目录中的Q?
  3. ?ECLIPSE_HOME%下徏立一个PlugInsNew的目录;
      比如QE:\OpenSource\Eclipse\PlugInsNew
  4. 如果你下载了一个新的插Ӟ比如叫做QXYZ

    那么在%ECLIPSE_HOME%\PlugInsNew\目录下徏立XYZ目录Q目录里面是eclipse目录Qeclipse目录包含有features与plugins两个子目录;l构如下图所C:(x)

    ?
  5. 把下载的新插件的文g攑֜以下相应目录中;
      %ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features

      %ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins

  6. 建立相关?link的文Ӟ

      然后?ECLIPSE_HOME%\links目录里徏立一个XYZ.link的文?br />
      内容如是Q?br />
      path=E:/OpenSource/Eclipse/PlugInsNew/XYZ

      ׃行这L(fng)路径指示而已?br />
      q样Q如果你下蝲了多个插件就可以如法炮制建立多个Link文gQ想加蝲哪个插g把哪个插g的Link文g攑ֈ%ECLIPSE_HOME%\links的目录中卛_Q用与理都很方便Q徏议千万不要放在默认的安装目录中,q样对于升Eclipseȝ序也方便一些;当然如果你喜Ƣ用Find and Install…q行安装的话也可以的Q?br />
      如果上面你的%ECLIPSE_HOME%与此不同Q请修改XYZ.link文g里的路径?br />
  7. 删除插gQ先关闭EclipseQ?
      删除%ECLIPSE_HOME%\links\XYZ.link文g卛_

      删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录?qing)文?br />
  8. 重新启动EclipseQ这样就可以了。如果插件没有生效或者没有删除,请加?cleanq行启动EclipseQ即Eclipse.exe –clean

  9. 插g安装验证?qing)记录详见?x)Eclipse的workspace下面?metadata\.log文gQ比如:(x)%ECLIPSE_HOME%\workspace\.metadata\.log文gQ有问题的话Q打开q个文g看看q进行解冟?

 认安装

  此插件安装方法采用上一节的《Eclipse使用技巧之插g理?br />
  重新启动Eclipse后,在Help è About Eclipse SDK è Plug-in Details你可以看到由“Spring IDE Developer”提供?#8220;Spring IDE”版本?#8220;1.3.2”插g?qing)相关的Graph、UI?qing)UI Search插gQ如下图所C:(x)

?
 
  相关要求

  注意Qؓ(f)了让Spring IDE插g能够昄可视化的Beanl构囑Ş?qing)Bean之间的依赖关p,需要Eclipse GEF(Graphical Editing Framework)的支持,自己下蝲q解压安装,安装技巧同上《Eclipse使用技巧之插g理》?br />
  Spring 1.2pd当前最新的E_版本?.2.8Q下载时可以选择包含Spring所依赖的一些开源包的文件spring-framework-1.2.8-with-dependencies.zipQ如果你已经清楚q有了Spring所依赖的相兛_源包Q就单独下蝲spring-framework-1.2.8.zip卛_。徏议下载前者?br />
  解压后目录结构及(qing)包的说明如下Q?br />
?

  dist目录下是Spring的发布包Q关于发布包下面?x)详l进行说明;

  docs目录下是相关的文,包括有Spring api的javadoc、reference参考指南、Spring的taglib标签使用文g?qing)Spring MVC的MVC-step-by-step讲解与示例;

  lib目录下是Spring所依赖的第三方开源包Q?br />
  mock目录下是Spring辅助应用试的Mock源程序;

  samples目录下是Spring的示例源E序?qing)简单的webappCZ框架的示例配|,值得好好学习(fn)的有jpetstore?qing)petclinicQ当然其它的countries、imagedb、tiles-example也可以好好参考一下;

  src目录下是Spring的源E序Q?br />
  test目录下Spring的单元测试源E序Q?br />
  tiger目录下是Java 1.5 Tiger斚w的相兛_(qing)试源程序?br />
  Spring包结构说?/strong>

  接下来详l说说dist目录下jar包的相关内容

  spring.jar是包含有完整发布的单个jar包,spring.jar中除了spring-mock.jar里所包含的内容外其它所有jar包的内容Q因为只有在开发环境下才会(x)用到spring-mock.jar来进行辅助测试,正式应用pȝ中是用不得这些类的?br />
  除了spring.jar文gQSpringq包括有其它13个独立的jar包,各自包含着对应的SpringlgQ用户可以根据自q需要来选择l合自己的jar包,而不必引入整个spring.jar的所有类文g?br />
  spring-core.jar

  q个jar文g包含Spring框架基本的核心工L(fng)QSpring其它lg要都要用到q个包里的类Q是其它lg的基本核心,当然你也可以在自q应用pȝ中用这些工L(fng)?br />
  spring-beans.jar

  q个jar文g是所有应用都要用到的Q它包含讉K配置文g、创建和理bean以及(qing)q行Inversion of Control / Dependency InjectionQIoC/DIQ操作相关的所有类。如果应用只需基本的IoC/DI支持Q引入spring-core.jar?qing)spring-beans.jar文g可以了?br />
  spring-aop.jar

  q个jar文g包含在应用中使用Spring的AOPҎ(gu)时所需的类。用基于AOP的SpringҎ(gu),如声明型事务理QDeclarative Transaction ManagementQ,也要在应用里包含q个jar包?br />
  spring-context.jar

  q个jar文g为Spring核心提供了大量扩展。可以找C用Spring ApplicationContextҎ(gu)时所需的全部类QJDNI所需的全部类QUI斚w的用来与模板QTemplatingQ引擎如Velocity、FreeMarker、JasperReports集成的类Q以?qing)校验Validation斚w的相关类?br />
  spring-dao.jar

  q个jar文g包含Spring DAO、Spring Transactionq行数据讉K的所有类。ؓ(f)了用声明型事务支持Q还需在自q应用里包含spring-aop.jar?br />
  spring-hibernate.jar

  q个jar文g包含Spring对Hibernate 2?qing)Hibernate 3q行装的所有类?br />
  spring-jdbc.jar

  q个jar文g包含对Spring对JDBC数据讉Kq行装的所有类?br />
  spring-orm.jar

  q个jar文g包含Spring对DAOҎ(gu)集q行了扩展,使其支持 iBATIS、JDO、OJB、TopLinkQ因为Hibernate已经独立成包了,现在不包含在q个包里了。这个jar文g里大部分的类都要依赖spring-dao.jar里的c,用这个包时你需要同时包含spring-dao.jar包?br />
  spring-remoting.jar

  q个jar文g包含支持EJB、JMS、远E调用RemotingQRMI、Hessian、Burlap、Http Invoker、JAX-RPCQ方面的cR?br />
  spring-support.jar

  q个jar文g包含支持~存CacheQehcacheQ、JCA、JMX、邮件服务(Java Mail、COS MailQ、Q务计划SchedulingQTimer、QuartzQ方面的cR?br />
  spring-web.jar

  q个jar文g包含Web应用开发时Q用到Spring框架时所需的核心类Q包括自动蝲入WebApplicationContextҎ(gu)的cRStruts与JSF集成cR文件上传的支持cRFiltercd大量工具辅助cR?br />
  spring-webmvc.jar

  q个jar文g包含Spring MVC框架相关的所有类。包含国际化、标{、Theme、视囑ֱ现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关cR当Ӟ如果你的应用使用了独立的MVC框架Q则无需q个JAR文g里的McR?br />
  spring-mock.jar

  q个jar文g包含Spring一整套mockcL辅助应用的测试。Spring试套g使用了其中大量mockc,q样试更加简单。模拟HttpServletRequest和HttpServletResponsecdWeb应用单元试是很方便的?br />
  如何选择q些发布包,军_选用哪些发布包其实相当简单。如果你正在构徏Web应用q将全程使用SpringQ那么最好就使用单个全部的spring.jar文gQ如果你的应用仅仅用到简单的Inversion of Control / Dependency InjectionQIoC/DIQ容器,那么只需spring-core.jar与spring-beans.jar卛_Q如果你对发布的大小要求很高Q那么就得精挑细选了Q只取包含自己所需Ҏ(gu)的jar文g了。采用独立的发布包你可以避免包含自己的应用不需要的全部cR当然你可以采用其它的一些工h设法令整个应用包变小Q节省空间的重点在于准确地找己所需的Spring依赖c,然后合ƈ所需的类与包可以了。Eclispe有个插g叫ClassPath Helper可以帮你找找所依赖的类?br />
  Spring包依赖说?/strong>

spring-core.jar需commons-collections.jarQspring-core.jar是以下其它各个的基本?
spring-beans.jar需spring-core.jar/cglib-nodep-2.1_3.jar
spring-aop.jar需spring-core.jar/spring-beans.jar/cglib-nodep-2.1_3.jar/aopalliance.jar
spring-context.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/commons-collections.jar/aopalliance.jar
spring-dao.jar需spring-core.jar/spring-beans.jar/spring-aop.jar/spring-context.jar
spring-jdbc.jar需spring-core.jar/spring-beans.jar/spring-dao.jar
spring-web.jar需spring-core.jar/spring-beans.jar/spring-context.jar
spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar
spring-hibernate.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-orm.jar/spring-web.jar/spring-webmvc.jar
spring-orm.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-web.jar/spring-webmvc.jar
spring-remoting.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-web.jar/spring-webmvc.jar
spring-support.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar
spring-mock.jar需spring-core.jar/spring-beans.jar/spring-dao.jar/spring-context.jar/spring-jdbc
 插g介绍

  我们单地创徏一个示例工E,里面包含有一个接口类与两个实现该接口的实现类q行演示说明使用的方法?br />
  需要引入spring.jar、commons-logging.jar、log4j.jar

  单个引入需要引入spring-core.jar、spring-beans.jar、spring-context.jar

  接口c:(x)IHelloWorld.java
public interface     IHelloWorld
{
      String sayHelloWorld();
}

  实现cMQHelloWorld1.java
public class HelloWorld1 implements IHelloWorld
{
public HelloWorld1()
{
     super();
}
public String sayHelloWorld()
{
     return "Hello World HelloWorld1";
}
}

  实现cMQHelloWorld2.java
public class HelloWorld2 implements IHelloWorld
{
public HelloWorld2()
{
     super();
}
public String sayHelloWorld()
{
     return "Hello World HelloWorld2";
}
}

  Ҏ(gu)常用的三层与Spring的最?jng)_践,配|文件分成了四个

  beanRefFactory.xml负责总装Q由SingletonBeanFactoryLocator来装?br />
  通过ClassPathXmlApplicationContext来把其它三个模块的文件引?br />
  beanRefDataAccess.xml负责DAOQ与数据库相关的bean都定义在q里

  beanRefService.xml负责Service层的bean定义

  beanRefMVC.xml负责Spring MVC斚w相关的bean定义{等

  以下配置文g的bean定义为演C所用,各自的内容如下:(x)

  beanRefFactory.xml的内容如下:(x)
Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC     "-//SPRING//DTD BEAN//EN"    
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext"Q?
Qconstructor-argQ?
QlistQ?
QvalueQbeanRefDataAccess.xmlQ?valueQ?
QvalueQbeanRefService.xmlQ?valueQ?
QvalueQbeanRefMVC.xmlQ?valueQ?
Q?listQ?
Q?constructor-argQ?
Q?beanQ?
Q?beansQ?/pre>

  beanRefDataAccess.xml的内容如下:(x)
  Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC     "-//SPRING//DTD BEAN//EN"    
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="helloWorldDAO1" class="HelloWorld1"/Q?
Qbean id="helloWorldDAO2" class="HelloWorld2"/Q?
Q?beansQ?/pre>

  beanRefService.xml的内容如下:(x)
  Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC     "-//SPRING//DTD BEAN//EN"    
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="helloWorld1" class="HelloWorld1"/Q?
Qbean id="helloWorld2" class="HelloWorld2"/Q?
Qbean id="springDemoConstructor" class="SpringDemoConstructor"Q?
     Qconstructor-argQ?
      QvalueQSpring IDE ConstructorQ?valueQ?
     Q?constructor-argQ?
     Qproperty name="helloWorld"Q?
      Qref bean="helloWorld1"Q</refQ?
     Q?propertyQ?
Q?beanQ?
Qbean id="springDemoSetter" class="SpringDemoSetter"Q?
     Qproperty name="hello" value="Spring IDE Setter"/Q?
     Qproperty name="helloWorld"Q?
      Qref bean="helloWorld2"Q</refQ?
     Q?propertyQ?
Q?beanQ?
Q?beansQ?/pre>

  beanRefMVC.xml的内容如下:(x)
  Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC    
"-//SPRING//DTD BEAN//EN"    
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="helloWorldMVC1" class="HelloWorld1"/Q?
Qbean id="helloWorldMVC2" class="HelloWorld2"/Q?
Q?beansQ?

  右键目工程Q可以看?#8220;Add Spring Project Nature”菜单Q单d

?

  l心的你一定可以看到项目工ESpringIDEDemo前面的图标变成了一个S的标志,而不是原来的JQ当焉目里与Spring相关的文仉?x)在图标上显CZ个S标志。J

  右键弹出的菜单里׃(x)有个“Remove Spring Project Nature”的菜单了?br />
  你选择q个菜单q行U除后就不能q行以下的相x作了?br />
?

  Window è Show View è Other… è 可以看到Spring IDEQ打开它,如下所C,所中它q确定?br />
?

  可以看到如下的视图,右键工程的名Uͼ在弹出的Properties菜单上点d

?

  弹出属性框Q让我们来添加配|文?br />
?

  定后,可以看到刚才选择的四个配|文件已l在里面了,再次定?br />
?

  在Spring Beans视图里展开工程后,便可以看到增加进来的四个配置文g了?br />
?0

  也可以将配置文g攑ֈ配置集合里,如下所C:(x)

?1

  q样定以后Q可以看到四个文仉属于Service的节点下面,如下所C?br />
?2

  再次定后,在Spring Beans视图里看到Service节点Q展开它,可以看到所有配|文仉的bean都在q里列出来了?br />
?3

  展开昄两个定义的beanl点Q右键其中的一个结点,弹出四个菜点Q最后一个就是上面的配置菜单Q不再讲解了Q我们选中“Open Config File”菜单

?4

  于是׃(x)自动打开配置文gQƈ定位到bean的定义位|上面去了,如下所C,方便q行查看与改动?br />
?5

  在右键弹出的菜单炚w中“Open Bean Class”Q?br />
?6

  ׃(x)自动定位到对应的cL仉MQ如下所C?br />
?7

  在右键弹出的菜单炚w中“Show Graph”Q?br />
?8

  ׃(x)把当前这个bean以图形的方式昄出来Q如下所C?br />
?9

  但是q个演示的文件仅是一个独立的beanQ没有Q何关联等Q下面会(x)演示兌{?br />
  在Spring Beans视图里展开工程后,选中src/beanRefSerice.xml配置文gQ在右键弹出的菜单点选中“Show Graph”

?0

  ׃(x)把当前整个配|文件的内容以bean囑Ş的方式显C出来,如下所C?br />
?1

  以下演示bean的引用及(qing)构造注入与setter注入何关联等Q更多的操作cM了?br />
  定义一个接口类ISpringDemo.javaQ有两个Ҏ(gu)
  public interface ISpringDemo
{
IHelloWorld getHelloWorld();
String getHello();
}

  实现cMSpringDemoConstructor.javaQ含有构造注入及(qing)setter注入
  public class SpringDemoConstructor implements ISpringDemo
{
private String hello;
private IHelloWorld helloWorld;
   
public SpringDemoConstructor(String hello)
{
    this.hello = hello;
}
   
public String getHello()
{
    return hello;
}
public IHelloWorld getHelloWorld()
{
    return helloWorld;
}
public void setHelloWorld(IHelloWorld helloWorld)
{
    this.helloWorld = helloWorld;
}
}

  实现cMSpringDemoSetter.javaQ都是setter注入
  public class SpringDemoSetter implements ISpringDemo
{
private String hello;
private IHelloWorld helloWorld;
public String getHello()
{
    return hello;
}
public void setHello(String hello)
{
    this.hello = hello;
}
public IHelloWorld getHelloWorld()
{
    return helloWorld;
}
public void setHelloWorld(IHelloWorld helloWorld)
{
    this.helloWorld = helloWorld;
}
}

  配置文gbeanRefService.xml增加bean定义Q成为如下,U字为新增的
  Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC   
"-//SPRING//DTD BEAN//EN"   
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="helloWorld1" class="HelloWorld1"/Q?
Qbean id="helloWorld2" class="HelloWorld2"/Q?
Qbean id="springDemoConstructor" class="SpringDemoConstructor"Q?
    Qconstructor-argQ?
     QvalueQSpring IDE ConstructorQ?valueQ?
    Q?constructor-argQ?
    Qproperty name="helloWorld"Q?
     Qref bean="helloWorld1"Q</refQ?
    Q?propertyQ?
Q?beanQ?
Qbean id="springDemoSetter" class="SpringDemoSetter"Q?
    Qproperty name="hello" value="Spring IDE Setter"/Q?
    Qproperty name="helloWorld"Q?
     Qref bean="helloWorld2"Q</refQ?
    Q?propertyQ?
Q?beanQ?
Q?beansQ?/pre>

  注意Q?br />
  如果bean是定义在同一个文仉的可以用
  Qref local="helloWorld2"Q</refQ?/pre>

  如果不是在同一个配|文仉的,要用
  Qref bean="helloWorld2"Q</refQ?/pre>

  要不然会(x)报到bean找不刎ͼ

  q样配置完成后,我们切换?#8220;Spring Beans”视图Q在beanRefService.xml节点上右键打开“Show Graph”菜单Q可以看到如下所C:(x)

?1

  q时bean里面单的引用关系p现出来了?br />
?2

  在bean图上右键Q会(x)打开三个操作菜单Q?br />
  Open Java Type卛_位到bean的类文g上面Q?br />
  Open Config File卛_位到bean的xml配置文g上面Q?br />
  Show In Beans View卛_位到“Spring Beans”的视N的具体某个节点上Q如下所C?br />
?3

  此时我们可以在配|集合的Service节点上面右键Q选择“Show Graph”

?4

  q样׃(x)昄出所有的配置文g集合里的所有bean文g?qing)其兌引用情况Q如下图?br />
?5

  带圈的P图标表示是属性,即setterҎ(gu)注入Q带圈的C图标表示构造注入。箭头表C引用关pM。J

  中间一排演C用的四个bean没有兌引入Q就光杆o(h)地在那里排队了啦J

  最下面的带圈的C后面又跟着一大排参数Q表C集合类型的了。如list

  Spring IDE提供错误查功能,比如我在配置文g中输入一个不存在的类的名Uͼ保存后,׃(x)在边上出现红色提C,鼠标UMd?x)出现提CZ息,如下图所C?br />
?6

  当然也会(x)有Problems视图里显C相应的错误信息Q如下图Q?br />
?7

  以下演示bean的引用及(qing)构造注入与setter注入何关联等Q更多的操作cM了?br />
  定义一个接口类ISpringDemo.javaQ有两个Ҏ(gu)
  public interface ISpringDemo
{
IHelloWorld getHelloWorld();
String getHello();
}

  实现cMSpringDemoConstructor.javaQ含有构造注入及(qing)setter注入
  public class SpringDemoConstructor implements ISpringDemo
{
private String hello;
private IHelloWorld helloWorld;
   
public SpringDemoConstructor(String hello)
{
    this.hello = hello;
}
   
public String getHello()
{
    return hello;
}
public IHelloWorld getHelloWorld()
{
    return helloWorld;
}
public void setHelloWorld(IHelloWorld helloWorld)
{
    this.helloWorld = helloWorld;
}
}

  实现cMSpringDemoSetter.javaQ都是setter注入
  public class SpringDemoSetter implements ISpringDemo
{
private String hello;
private IHelloWorld helloWorld;
public String getHello()
{
    return hello;
}
public void setHello(String hello)
{
    this.hello = hello;
}
public IHelloWorld getHelloWorld()
{
    return helloWorld;
}
public void setHelloWorld(IHelloWorld helloWorld)
{
    this.helloWorld = helloWorld;
}
}

  配置文gbeanRefService.xml增加bean定义Q成为如下,U字为新增的
  Qxml version="1.0" encoding="UTF-8"Q?
Q?DOCTYPE beans PUBLIC   
"-//SPRING//DTD BEAN//EN"   
"http://www.springframework.org/dtd/spring-beans.dtd"Q?
QbeansQ?
Qbean id="helloWorld1" class="HelloWorld1"/Q?
Qbean id="helloWorld2" class="HelloWorld2"/Q?
Qbean id="springDemoConstructor" class="SpringDemoConstructor"Q?
    Qconstructor-argQ?
     QvalueQSpring IDE ConstructorQ?valueQ?
    Q?constructor-argQ?
    Qproperty name="helloWorld"Q?
     Qref bean="helloWorld1"Q</refQ?
    Q?propertyQ?
Q?beanQ?
Qbean id="springDemoSetter" class="SpringDemoSetter"Q?
    Qproperty name="hello" value="Spring IDE Setter"/Q?
    Qproperty name="helloWorld"Q?
     Qref bean="helloWorld2"Q</refQ?
    Q?propertyQ?
Q?beanQ?
Q?beansQ?/pre>

  注意Q?br />
  如果bean是定义在同一个文仉的可以用
  Qref local="helloWorld2"Q</refQ?/pre>

  如果不是在同一个配|文仉的,要用
  Qref bean="helloWorld2"Q</refQ?/pre>

  要不然会(x)报到bean找不刎ͼ

  q样配置完成后,我们切换?#8220;Spring Beans”视图Q在beanRefService.xml节点上右键打开“Show Graph”菜单Q可以看到如下所C:(x)

?1

  q时bean里面单的引用关系p现出来了?br />
?2

  在bean图上右键Q会(x)打开三个操作菜单Q?br />
  Open Java Type卛_位到bean的类文g上面Q?br />
  Open Config File卛_位到bean的xml配置文g上面Q?br />
  Show In Beans View卛_位到“Spring Beans”的视N的具体某个节点上Q如下所C?br />
?3

  此时我们可以在配|集合的Service节点上面右键Q选择“Show Graph”

?4

  q样׃(x)昄出所有的配置文g集合里的所有bean文g?qing)其兌引用情况Q如下图?br />
?5

  带圈的P图标表示是属性,即setterҎ(gu)注入Q带圈的C图标表示构造注入。箭头表C引用关pM。J

  中间一排演C用的四个bean没有兌引入Q就光杆o(h)地在那里排队了啦J

  最下面的带圈的C后面又跟着一大排参数Q表C集合类型的了。如list

  Spring IDE提供错误查功能,比如我在配置文g中输入一个不存在的类的名Uͼ保存后,׃(x)在边上出现红色提C,鼠标UMd?x)出现提CZ息,如下图所C?br />
?6

  当然也会(x)有Problems视图里显C相应的错误信息Q如下图Q?br />
?7

 XMLBuddy

  ׃打开XML文g时会(x)Ҏ(gu)XML文g里定义的DTDȝ上查扄应的DTD文gQ这样导x开的时候会(x)相当慢,特别是如果你的机器上不了外网的话Q就更慢了?br />
  解决的办法有两个Q?br />
  一、在本机开启Web服务Q如Tomcat{等Q,q设|端口ؓ(f)80Q然后根据DTD 的目录结构徏立相应的l构Qƈ把DTD文g放进厅R然后在hosts文g里把本机的地址映射到相应的DTD指定的网站去Q如Q?br />
  127.0.0.1// www.springframework.org

  q样打开XML文g时就?x)在本机LDTD文gq行验证Q速度快很多了J

  二、打开XMLBuddy插g的安装目录,q找到其中的cache目录Q比如:(x)%ECLIPSE_HOME%\PlugInsNew\xmlbuddy\eclipse\plugins\com.objfac.xmleditor_2.0.72\.cache

  打开meta.xml文gQ一看就知道怎么处理了吧Q如法炮Ӟ选把DTD文g拯到这个cache目录里,再增加内容到meta.xml里来Q比如:(x)
QfileQ?
QpubQ?//SPRING//DTD    BEAN//ENQ?pubQ?
QabsQhttp://www.springframework.org/dtd/spring-beans.dtdQ?absQ?
QrelQspring-beans.dtdQ?relQ?
Q?fileQ?/pre>

  要增加其它的DTD文gҎ(gu)cMQ不断地增加说明与DTD文g卛_?br />
  于是在编辑XML文g时就?x)有相关的提C及(qing)错误提示信息Q可以减一些书写XML文g时发生的低错误了?br />
?8

  试与运?/strong>

  先徏立一个Log4J的配|文件log4j.propertiesQ内容如?br />
# Set root logger level to ERROR and its only appender to R.
log4j.rootLogger = INFO,R
# R is set to be a DailyRollingFileAppender.
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File = Application.log
log4j.appender.R.DatePattern = yyyy-MM-dd'.log'
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

  再创Z个ServiceFactory.java静态类Q用来做单元试方便一?br />
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
public final class ServiceFactory
{
private static BeanFactoryLocator bfLocator = null;
private static BeanFactoryReference bfReference = null;
private static BeanFactory factory = null;
static
{
    bfLocator = SingletonBeanFactoryLocator.getInstance();
    bfReference = bfLocator.useBeanFactory("beanFactory");
    factory = bfReference.getFactory();
}
   
private ServiceFactory()
{
    super();
}
public static Object getBeanByName(final String beanName)
{
    return factory.getBean(beanName);
}
}
  做成静态的q样我们可以ServiceFactory .getBeanByName(“beanname”)可以得到相应的bean了?br />
  试cSpringIDETest.java代码如下Q?br />
import junit.framework.TestCase;
public class SpringIDETest extends TestCase
{
private IHelloWorld helloWorld = null;
private ISpringDemo springDemo = null;
private final static String hello1 = "Hello World HelloWorld1";
private final static String hello2 = "Hello World HelloWorld2";
private final static String helloset = "Spring IDE Setter";
private final static String hellocon = "Spring IDE Constructor";
public void testSpringBeans()
{
    helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld1");
    assertEquals(hello1,helloWorld.sayHelloWorld());
    helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld2");
    assertEquals(hello2,helloWorld.sayHelloWorld());
}
public void testIoCConstructor()
{
    //Constructor
    springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoConstructor");
    assertEquals(hellocon,springDemo.getHello());
    assertEquals(hello1,springDemo.getHelloWorld().sayHelloWorld());
}
public void testIoCSetter()
{
    //Setter
    springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoSetter");
    assertEquals(helloset,springDemo.getHello());
    assertEquals(hello2,springDemo.getHelloWorld().sayHelloWorld());
}
}

  Run As JUnit Test之,l色打勾全部通过收工走Z。。。J

  当然也可以打开Application.log文g查看输出一些什么信息?br />
  使用ȝ

  此插件的功能不错Q)对于Springq样优雅的框架来_(d)再加上这个助手,真的是很很了Q美地喝上一杯咖啡吧

suprasoft Inc,. 2009-02-04 23:40 发表评论
]]>使用JDT的包选择Dialoghttp://www.tkk7.com/charles/archive/2009/02/04/253328.htmlsuprasoft Inc,.suprasoft Inc,.Wed, 04 Feb 2009 15:04:00 GMThttp://www.tkk7.com/charles/archive/2009/02/04/253328.htmlhttp://www.tkk7.com/charles/comments/253328.htmlhttp://www.tkk7.com/charles/archive/2009/02/04/253328.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/253328.htmlhttp://www.tkk7.com/charles/services/trackbacks/253328.html   btnBrowsePackage.setText("...");
  btnBrowsePackage.addSelectionListener(new SelectionListenerAdapter(){
   public void widgetSelected(SelectionEvent e)
   {
    super.widgetSelected(e);
    IJavaProject javaProject = JavaCore.create(getCurrentProject());
    SelectionDialog dialog = null;
    try
    {
     dialog = JavaUI.createPackageDialog(getSite().getShell(),
       javaProject,IJavaElementSearchConstants.CONSIDER_REQUIRED_PROJECTS);
    } catch (JavaModelException e1)
    {
     ExceptionHandler.handleExceptionAndAbort(e1);
    }
    if (dialog.open() != Window.OK)
    {
     return;
    }
    IPackageFragment pck = (IPackageFragment) dialog.getResult()[0];
    if (pck != null)
    {
     txtPackageName.setText(pck.getElementName());
    }
   }
   
  }); 


suprasoft Inc,. 2009-02-04 23:04 发表评论
]]>
Eclipse JDT的一些资?/title><link>http://www.tkk7.com/charles/archive/2009/02/04/253324.html</link><dc:creator>suprasoft Inc,.</dc:creator><author>suprasoft Inc,.</author><pubDate>Wed, 04 Feb 2009 14:20:00 GMT</pubDate><guid>http://www.tkk7.com/charles/archive/2009/02/04/253324.html</guid><wfw:comment>http://www.tkk7.com/charles/comments/253324.html</wfw:comment><comments>http://www.tkk7.com/charles/archive/2009/02/04/253324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/charles/comments/commentRss/253324.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/charles/services/trackbacks/253324.html</trackback:ping><description><![CDATA[最q给目l做了个代码自动生成的小插gQ已l发布到了google codeQ?<a title="http://code.google.com/p/ormapper/" >http://code.google.com/p/ormapper/</a><br /> 不管如何Q对做一个插件有了一个完整的实践。基本上一些很重要很基的UI都用q?br /> <br /> 说实话,如果做插Ӟ不能不看别h写的插g的源代码Q那么JDT昄是首?br /> <br /> 我把ECLIPSE官方|上的一些资料整理出来,如果有不对的地方Q希望大家指正?br /> 如果想用JDT的话Q需要引入以下的包:(x)<br /> <br /> <div twffan="done"><span twffan="done"><span id="osdydco" class="resultofText" twffan="done" name="resultofMatch">JDT</span> Core packages give you access to the Java model objects and headless Java IDE infrastructure.  The <span id="kntxzdq" class="resultofText" twffan="done" name="resultofMatch">JDT</span> Core packages include:</span></div> <ul> <li><strong><a ><span twffan="done">org.eclipse.<span id="nlmbygn" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core</span></a></strong> - defines the classes that describe the Java model. <li><strong><a ><span twffan="done">org.eclipse.<span id="nslyled" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.compiler</span></a> </strong>- defines an API for the compiler infrastructure. <li><strong><a ><span twffan="done">org.eclipse.<span id="dxkulvf" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.dom</span></a> </strong>- supports Abstract Syntax Trees (AST) that can be used for examining the structure of a compilation unit down to the statement level. <li><strong><a ><span twffan="done">org.eclipse.<span id="xnezjxs" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.dom.rewrite</span></a> </strong>- supports rewriting of Abstract Syntax Trees (AST) that can be used for manipulating the structure of a compilation unit down to the statement level. <li><strong><a ><span twffan="done">org.eclipse.<span id="pjpvkpk" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.eval</span></a></strong> - supports the evaluation of code snippets in a scrapbook or inside the debugger. <li><strong><a ><span twffan="done">org.eclipse.<span id="lgidyxw" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.formatter</span></a></strong> - supports the formatting of compilation units, types, statements, expressions, etc. <li><a ><strong><span twffan="done">org.eclipse.<span id="hmwnqak" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.jdom</span></strong></a> - supports a Java Document Object Model (DOM) that can be used for walking the structure of a Java compilation unit. <li><strong><a ><span twffan="done">org.eclipse.<span id="irqpcml" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.search</span></a></strong> - supports searching the workspace's Java model for Java elements that match a particular description.   <li><strong><a ><span twffan="done">org.eclipse.<span id="rtvmwrx" class="resultofText" twffan="done" name="resultofMatch">jdt</span>.core.util</span></a> </strong>- provides utility classes for manipulating .class files and Java model elements. </li> </ul> <img src ="http://www.tkk7.com/charles/aggbug/253324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/charles/" target="_blank">suprasoft Inc,.</a> 2009-02-04 22:20 <a href="http://www.tkk7.com/charles/archive/2009/02/04/253324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Eclipse Tips] 讄eclipse RCP的tab样式http://www.tkk7.com/charles/archive/2009/02/04/253322.htmlsuprasoft Inc,.suprasoft Inc,.Wed, 04 Feb 2009 14:13:00 GMThttp://www.tkk7.com/charles/archive/2009/02/04/253322.htmlhttp://www.tkk7.com/charles/comments/253322.htmlhttp://www.tkk7.com/charles/archive/2009/02/04/253322.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/253322.htmlhttp://www.tkk7.com/charles/services/trackbacks/253322.html我用的是Eclipse 3.4Q在|上找了很多资料来解册个问题,主要是两个方法:(x)配置文g法和编码法。我l过仔细试Q反正是没有搞定通过配置文g来设|L线外ŞQ也许是Eclipse版本的问题吧?/span>

Ҏ(gu)1Q?/span>
我们可以通过配置文g的方式来更改产品的样式。(注:(x)q种Ҏ(gu)我经q测试是不可以的Q但是网上大量的都是q种Ҏ(gu)Q姑且放到这里)
首先Q在plugin.xml中对org.eclipse.core.runtime.products扩展点的属性进行更改,如下Q?/span>
 1 <extension
 2          id="product"
 3          point="org.eclipse.core.runtime.products">
 4       <product
 5 <!--[if !vml]--><!--[endif]-->            application="cn.blogjava.youxia.rcp_start.application"
 6 <!--[if !vml]--><!--[endif]-->            name="
W一?span twffan="done">RCPE序">
 7 <!--[if !vml]--><!--[endif]-->         <property
 8 <!--[if !vml]--><!--[endif]-->               name="preferenceCustomization"
 9 <!--[if !vml]--><!--[endif]-->               value="plugin_customization.ini"/>
10 <!--[if !vml]--><!--[endif]-->      </product>
11 <!--[if !vml]--><!--[endif]--></extension>
 
可见Q我们ؓ(f)我们的品添加了一?/span>prefereneCustomization属性,该属性的gؓ(f)plugin_customization.ini文gQ在该文件中Q我们可以配|我们的样式。在q里Q它的内容如下:(x)
1 <!--[if !vml]--><!--[endif]-->org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
2 <!--[if !vml]--><!--[endif]-->org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight
 
事实上,在这个文件中可以定义的参数有上百个,可以查看Eclipse的文?/span>
 
Ҏ(gu)2Q?/span>
采用编码实玎ͼ重蝲ApplicationWorkbenchAdvisorinitialize()接口Q代码如下:(x)
@Override
publicvoid initialize(IWorkbenchConfigurer configurer) {
    super.initialize(configurer);
 
    //讄标签弧U型外观
    PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false);
}
 
IWorkbenchPreferenceConstants常见属?/span>
?/span> ?/span> ?/span>
?/span> ?/span> ?/span> ?/span>
EDITOR_MINIMUM_CHARACTERS
但很多编辑器重叠Ӟ讄~辑器标题文字的最短长度。默认ؓ(f)8个字W?/span>
SHOW_PROGRESS_ON_STARTUP
讄启动时是否显C度条。默认?/span>false
DOCK_PERSPECTIVE_BAR
讄透视图标题栏停泊位置。默认gؓ(f)TOP_RIGHTQ还可以讄?/span>TOP_LEFT?/span>LEFT
SHOW_TEXT_ON_PERSPECTIVE_BAR
讄透视图是否显C标题文本。默认gؓ(f)true
SHOW_INTRO
启动时是否显C欢q画面。默认gؓ(f)true


suprasoft Inc,. 2009-02-04 22:13 发表评论
]]>
Eclipse中常用的menubarPathhttp://www.tkk7.com/charles/archive/2009/01/18/251807.htmlsuprasoft Inc,.suprasoft Inc,.Sun, 18 Jan 2009 14:44:00 GMThttp://www.tkk7.com/charles/archive/2009/01/18/251807.htmlhttp://www.tkk7.com/charles/comments/251807.htmlhttp://www.tkk7.com/charles/archive/2009/01/18/251807.html#Feedback0http://www.tkk7.com/charles/comments/commentRss/251807.htmlhttp://www.tkk7.com/charles/services/trackbacks/251807.html阅读全文

suprasoft Inc,. 2009-01-18 22:44 发表评论
]]>
վ֩ģ壺 ɫɫwww| һ | þ޴ɫĻþþ| mm1313޾Ʒִִ | պѸ岥| һѸƵ| ƷһƵ| Ʒ޾ƷþþƷ | ˳վӰȷ沥| ˳ַ߹ۿ| ޾ƷƵۿ| Ƶۿ| Ļav| av߹ۿ| ޾ƷҺһ | ޾ƷӰۺ| ޢva| AVһAV| | ޹Ƶ| պŷһ| ޳AVƬ߳ˮ| ޾Ʒһ| Ҹ| ¹͵Ʒվ| պѲ| ȫëƬ߲| ҹվѰ߹ۿ| ?vŮ˵߹ۿ| պAVĻ | 91Ʒһ鶹| ëƬѹۿ| ѿƷ鶹| Ļ| þþ뾫Ʒպ˳ | AVһ| avѴƬ߹ۿ| ˵һ| þþþþavѿƬ| պӰ߹ۿվ| 97ƵѲ|