`

实例详解 classpath

阅读更多

Java很诱人,但对于刚跨入Java门槛的初学者来说,编译并运行一个无比简单的Java程序简直就是一个恶梦。明明程序没错,但各种各样让人摸不着头脑的错误信息真的让你百思不得其解,许多在Java门口徘徊了很久的初学者就这样放弃了学习Java的机会,很是可惜。笔者也经历过这个无比痛苦的阶段,感觉到编译难的问题就出在classpath的设置及对package的理解之上。本文以实例的方式,逐一解决在编译过程中所出现的各种classpath的设置问题。本文实例运行的环境是在WindowsXP + JDK 1.5.0。对其他的环境,读者应该很容易进行相应的转换。

 

1. 下载并安装JDK1.5.0,并按默认路径,安装到C:\ProgramFiles\Java\jdk1.5.0中。

 

2.用鼠标单击WindowsXP的“开始”->“运行”,在弹出的运行窗口中输入cmd,按确定或回车,打开一个命令行窗口。

 

3. 在命令行中输入:

 

java

 

有一列长长的洋文滚了出来,这是JDK告诉我们java这个命令的使用方法。其中隐含了一个重要信息,即JDK安装成功,可以在命令行中使用java此命令了。

 

4. 在命令行中输入

 

javac

 

屏幕显示:

 

javac 不是内部或外部命令,也不是可运行的程序或批处理文件。

 

这是由于windows找不到javac这个命令的原因。这就不明白了,java与javac都是JDK在同一个子目录里面的两个文件,为什么可以直接运行java而不能直接运行javac呢?原来,Sun公司为了方便大家在安装完JDK后马上就可以运行Java类文件,在后台悄悄地将java命令加入了Path的搜索路径中,因此我们可以直接运行java命令(但我们是看不到它到底是在哪设置的,无论是在用户的Path或系统的Path设置中均找不到这个java存放的路径)。但Sun所做的到此为止,其他JDK的命令,一概不管,需要由用户自己添加到搜索路径中。

 

5.既然如此,那我们自己添加Path的搜索路径吧。对“我的电脑”按右键,选“属性”,在“系统属性”窗口中选“高级”标签,再按“环境变量”按钮,弹出一个“环境变量”的窗口,在用户变量中新建一个变量,变量名为“Path”,变量值为"C:\ProgramFiles\Java\jdk1.5.0\bin;%PATH%"。最后的%PATH%的意思是说,保留原有的Path设置,且将目前的Path设置新加到其前面。一路按“确定”退出(共有3次)。关掉原来的命令行窗口,依照第2步,重新打开一个新的命令行窗口。在此窗口中输入

 

javac

 

长长的洋文又出现了,这回是介绍javac的用法。设置成功。

 

6. So far so good.到目前为止,我们已经可以编程了。但是,这不是一个好办法。因为随着以后我们深入学习Java,我们就会用到JUnit、Ant或NetBeans等应用工具,这些工具在安装时,都需要一个名为指向JDK路径的“JAVA_HOME”的环境变量,否则就安装不了。因此,我们需要改进第5步,为以后作好准备。依照第5步,弹出“环境变量”的窗口,在用户变量中新建一个变量,变量名为“JAVA_HOME”,变量值为"C:\ProgramFiles\Java\jdk1.5.0"。注意,这里的变量值只到jdk1.5.0,不能延伸到bin中。确定后,返回“环境变量”的窗口,双击我们原先设定的Path变量,将其值修改为“%JAVA_HOME%\bin;%PATH%”。这种效果与第5步是完全一样的,只不过多了一个JAVA_HOME的变量。这样,以后当我们需要指向JDK的路径时,只需要加入“%JAVA_HOME%”就行了。至此,Path路径全部设置完毕。一路确定退出,打开新的命令行窗口,输入

 

javac

 

如果长长的洋文出现,Path已经设置正确,一切正常。如果不是,请仔细检查本步骤是否完全设置正确。

 

7.开始编程。在C盘的根目录中新建一个子目录,名为“JavaTest”,以作为存放Java源代码的地方。打开XP中的记事本,先将其保存到JavaTest文件夹中,在“文件名”文本框中输入"Hello.java"。注意,在文件名的前后各加上一个双引号,否则,记事本就会将其存为"Hello.java.txt"的文本文件。然后输入以下代码:

 

public class Hello {

public static void main(String[] args) {

System.out.println("Hello, world");

}

}

 

再次保存文件。

 

8. 在命令行窗口中输入

 

cd C:\JavaTest

 

将当前路径转入JavaTest中。然后,输入

 

javac Hello.java

 

JDK就在JavaTest文件夹中编译生成一个Hello.class的类文件。如果出现“1error”或“XXerrors”的字样,说明是源代码的输入有误,请根据出错提示,仔细地按第7步的代码找出并修正错误。请读者注意甄别代码输入有误的问题与classpath设置有误的问题。因为本文是关于如何正确设置classpath及package的,因此,这里假设读者输入的代码准确无误。到目前为此,由于我们是在源代码的当前路径下编译,因此,不会出现classpath设置有误的问题。

 

9. 在命令行窗口中输入

 

java Hello

 

屏幕出现了

 

Hello world

 

成功了,我们已经顺利地编译及运行了第一个Java程序。

但是,第8步及第9步是不完美的,因为我们是在JavaTest这个存放源码的文件夹中进行编译及运行的,因此,一些非常重要的问题并没有暴露出来。实际上,第8步的“javacHello.java”及第9步的“javaHello”涉及到两个问题,一是操作系统如何寻找“javac”及“java”等命令,二是操作系统如何寻找“Hello.java”及“Hello.class”这些用户自己创建的文件。对于“javac”及“java”等命令,由于它们均是可执行文件,操作系统就会依据我们在第6步中设置好的Path路径中去寻找。而对于“Hello.java”及“Hello.class”这些文件,Path的设置不起作用。由于我们是在当前工作路径中工作,java及javac会在当前工作路径中寻找相应的java文件(class文件的寻找比较特殊,详见第11步),

因此一切正常。下面我们开始人为地将问题复杂化,在非当前工作路径中编译及运行,看看结果如何。

 

10. 在命令行窗口中输入

 

cd C:

转入到C盘根目录上,当前路径离开了存放源码的工作区。输入

 

javac Hello.java

 

屏幕出现:

 

error: cannot read: Hello.java

1 error

 

找不到Hello.java了。我们要给它指定一个路径,告诉它到C:\JavaTest去找Hello.java文件。输入

 

javac C:\JavaTest\Hello.java

 

OK,这回不报错了,编译成功。

 

11. 输入

 

java C:\JavaTest\Hello

 

这回屏幕出现:

 

Exception in thread "main" java.lang.NoClassDefFoundError:C:\JavaTest\Hello

 

意思为在“C:\JavaTest\Hello”找不到类的定义。明明C:\JavaTest\Hello是一个.class文件,为什么就找不到呢?原来,Java对待.java文件与.class文件是有区别的。对.java文件可以直接指定路径给它,而java命令所需的.class文件不能出现扩展名,也不能指定额外的路径给它。

 

那么,如何指定路径呢?对于Java所需的.class文件,必须通过classpath来指定。

 

12.依照第5步,弹出“环境变量”窗口,在用户变量中新建一个变量,变量名为“classpath”,变量值为"C:\JavaTest"。一路按“确定”退出。关闭原命令行窗口,打开新的命令行窗口,输入

 

java Hello

 

“Helloworld”出来了。由此可见,在“环境变量”窗口中设置classpath的目的就是告诉JDK,到哪里去寻找.class文件。这种方法一旦设置好,以后每次运行java或javac时,在需要调用.class文件时,JDK都会自动地来到这里寻找。因此,这是一个全局性的设置。

 

13.除了这种在环境变量”窗口中设置classpath的方法之外,还有另一种方法,即在java命令后面加上一个选项classpath,紧跟着不带扩展名的class文件名。例如,

 

java -classpath C:\JavaTest Hello

 

JDK遇到这种情况时,先根据命令行中的classpath选项中指定的路径去寻找.class文件,找不到时再到全局的classpath环境变量中去寻找。这种情况下,即使是没有设置全局的classpath环境变量,由于已经在命令行中正确地指定类路径,也可以运行。

 

为了在下面的例子中更好地演示classpath的问题,我们先将全局的classpath环境变量删除,而在必要时代之以命令行选项-classpath。弹出“环境变量”窗口,选中“classpath”的变量名,按“删除”键。

 

此外,java命令中还可以用cp,即classpath的缩写来代替classpath,如java-cp C:\JavaTest Hello。特别注意的是,JDK1.5.0之前,javac命令不能用cp来代替classpath,而只能用classpath。而在JDK1.5.0中,java及javac都可以使用cp及classpath。因此,为保持一致,建议一概使用classpath作为选项名称。

 

14.我们再次人为地复杂化问题。关闭正在编辑Hello.java的记事本,然后将JavaTest文件夹名称改为带空格的“JavaTest”。在命令行中输入

 

javac C:\Java Test\Hello.java

 

长长的洋文又出来了,但这回却是报错了:

 

javac: invalid flag: C:\Java

 

JDK将带有空格的C:\JavaTest分隔为两部分"C:\Java"及"Test\Hello.java",并将C:\Java视作为一个无效的选项了。这种情况下,我们需要将整个路径都加上双引号,即

 

javac "C:\Java Test\Hello.java"

 

这回JDK知道,引号里面的是一个完整的路径,因此就不会报错了。同样,对java命令也需要如此,即

 

java -classpath "C:\Java Test" Hello

 

对于长文件名及中文的文件夹,XP下面可以不加双引号。但一般来说,加双引号不容易出错,也容易理解,因此,建议在classpath选项中使用双引号。

 

15. 我们再来看.java文件使用了其他类的情况。在C:\JavaTest中新建一个Person.java文件,内容如下:

 

public class Person {

private String name;

 

public Person(String name) {

this.name = name;

}

 

public String getName() {

return name;

}

}

 

然后,修改Hello.java,内容如下:

 

public class Hello {

public static void main(String[] args) {

Person person = new Person("Mike");

System.out.println(person.getName());

}

}

 

在命令行输入

 

javac "C:\Java Test\Hello.java"

 

错误来了:

 

C:\Java Test\Hello.java:3: cannot find symbol

symbol: class Person

 

JDK提示找不到Person类。为什么javac "C:\JavaTest\Hello.java"在第14步中可行,而在这里却不行了呢?第14步中的Hello.java文件并没有用来其他类,因此,JDK不需要去寻找其他类,而到了这里,我们修改了Hello.java,让其使用了一个Person类。根据第11步,我们需要告诉JDK,到哪里去找所用到的类,即使这个被使用的类就与Hello.java一起,同在C:\JavaTest下面!输入

 

javac -classpath "C:\Java Test" "C:\Java Test\Hello.java"

 

编译通过,JDK在C:\JavaTest文件夹下同时生成了Hello.class及Person.class两个文件。实际上,由于Hello.java使用了Person.java类,JDK先编译生成了Person.class,然后再编译生成Hello.class。因此,不管Hello.java这个主类使用了多少个其他类,只要编译这个类,JDK就会自动编译其他类,很方便。输入

 

java -classpath "C:\Java Test" Hello

 

屏幕出现了

 

Mike

 

成功。

 

16.第15步说明了在Hello.java中如何使用一个我们自己创建的Person.java,而且这个类与Hello.java是同在一个文件夹下。在这一步中,我们将考查Person.java如果放在不同文件夹下面的情况。

 

先将C:\Java Test文件夹下的Person.class文件删除,然后在C:\JavaTest文件夹下新建一个名为DF的文件夹,并将C:\JavaTest文件夹下的Person.java移动到其下面。在命令行输入

 

javac -classpath "C:\Java Test\DF" "C:\Java Test\Hello.java"

 

编译通过。这时javac命令没有什么不同,只需将classpath改成C:\JavaTest\DF就行了。

 

在命令行输入

 

java -classpath "C:\Java Test" Hello

 

这时由于Java需要找在不同文件夹下的两个.class文件,而命令行中只告诉JDK一个路径,即C:\JavaTest,在此文件夹下,只能找到Hello.class,找不到Person.class文件,因此,错误是可以预料得到的:

 

Exception in thread "main" java.lang.NoClassDefFoundError:Person

at Hello.main(Hello.java:3)

 

果真找不到Person.class。在设置两个以上的classpath时,先将每个路径以双引号引起来,再将这些路径以“;”号隔开,并且每个路径与“;”之间不能带有空格。因此,我们在命令行重新输入:

 

java -classpath "C:\Java Test";"C:\Java Test\DF" Hello

 

编译成功。但也暴露出一个问题,如果我们需要用到许多分处于不同文件夹下的类,那这个classpath的设置岂不是很长!有没有办法,对于一个文件夹下的所有.class文件,只指定这个文件夹的classpath,然后让JDK自动搜索此文件夹下面所有相应的路径?有,只要使用package。

 

17.package简介。Java中引入package的概念,主要是为了解决命名冲突的问题。比如说,在我们的例子中,我们设计了一个很简单的Person类,如果某人开发了一个类库,其中恰巧也有一个Person类,当我们使用这个类库时,两个Person类出现了命名冲突,JDK不知道我们到底要使用哪个Person类。更有甚者,当我们也开发了一个很庞大的类库,无可避免地,我们的类库中与其他人开发的类库中命名冲突的情况就会越来越多。总不能为了避免自己的类名与其他人开发的类名相同,而让每个编程人员都绞尽脑汁地将一个本应叫Writer的类强行改名为SarkuyaWriter,MikeWriter,SmithWriter吧?

 

现实生活中也是如此。假如你名叫张三,又假如与你同一单位的人中有好几个都叫张三,那你的问题就来了。某天单位领导在会上宣布,张三被任命为办公室主任,你简直不知道是该哭还是该笑。但如果你的单位中只有你叫张三,你才不会在乎全国叫张三的人有多少个,因为其他张三都分布在全国各地、其他城市,你看不见他们,摸不着他们,自然不会担心。

 

Sun从这个“张三问题”受到了很大的启发,为解决命名冲突问题,就采取了“眼不见心不烦”的策略:将每个类都归属到一个特定的区域中,在同一个区域中的所有类,都不允许同名;而不同区域的类,由于相互看不到,则允许有同名的类存在。这样,就解决了命名冲突的问题,正如北京的张三与上海的张三毕竟不是同一人。这个区域在Java中就叫package。由于package在Java中非常重要,如果你没有定义自己的package,JDK将会你的类都归到一个默认的无名package中。

 

自定义package的名称可以由各个程序员自由创建。作为避免命名冲突的手段,package的名称最好足以与其他程序员的区别开来。在互联网上,每个域名都是唯一的,因此,Sun推荐将你自己的域名倒写后作为package的名称。如果你没有自己的域名,很可能只是因为囊中羞涩而不去申请罢了,并不见得你假想的域名与其他域名发生冲突。例如,笔者假想的域名是sarkuya.com,目前就是唯一的,因此我的package就可以定名为com.sarkuya。谢谢Java给了我们一个免费使用我们自己域名的机会,唯一的前提是倒着写。当然,每个package下面还可以带有不同的子package,如com.sarkuya.util,com.sarkuya.swing,等等。

 

定义package的方式是在相应的.java文件的第一行加上“packagepackagename;”的字样,而且每个.java文件只能有一个package。实际上,Java中的package的实现是与计算机文件系统相结合的,即你有什么样的package,在硬盘上就有什么样的存放路径。例如,某个类的package名为com.sarkuya.util,那么,这个类就应该必须存放在com/sarkuya/util的路径下面。至于这个com/sarkuya/util又是哪个文件夹的子路径,第18步会谈到。

 

package除了有避免命名冲突的问题外,还引申出一个保护当前package下所有类文件的功能,主要通过为类定义几种可视度不同的修饰符来实现:public,protected, private, 另外加上一个并不真实存在的friendly类型。

 

对于冠以public的类、类属变量及方法,包内及包外的任何类均可以访问;

protected的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问;

private的类、类属变量及方法,包内包外的任何类均不能访问;

如果一个类、类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的任何类都可以访问它,而包外的任何类都不能访问它(包括包外继承了此类的子类),因此,这种类、类属变量及方法对包内的其他类是友好的,开放的,而对包外的其他类是关闭的。

 

前面说过,package主要是为了解决命名冲突的问题,因此,处在不同的包里面的类根本不用担心与其他包的类名发生冲突,因为JDK在默认情况下只使用本包下面的类,对于其他包,JDK一概视而不见:“眼不见心不烦”。如果要引用其他包的类,就必须通过import来引入其他包中相应的类。只有在这时,JDK才会进行进一步的审查,即根据其他包中的这些类、类属变量及方法的可视度来审查是否符合使用要求。如果此审查通不过,编译就此卡住,直至你放弃使用这些类、类属变量及方法,或者将被引入的类、类属变量及方法的修饰符改为符合要求为止。如果此审查通过,JDK最后进行命名是否冲突的审查。如果发现命名冲突,你可以通过在代码中引用全名的方式来显式地引用相应的类,如使用

 

java.util.Date = new java.util.Date()

 

或是

 

java.sql.Date = new java.sql.Date()。

 

package的第三大作用是简化classpath的设置。还记得第16步中的障碍吗?这里重新引用其java命令:

 

java -classpath "C:\Java Test";"C:\Java Test\DF" Hello

 

我们必须将所有的.class文件的路径一一告诉JDK,而不管DF其实就是C:\JavaTest的子目录。如果要用到100个不同路径的.class文件,我们就得将classpath设置为一个特别长的字符串,很累。package的引入,很好地解决了这个问题。package的与classpath相结合,通过import指令为中介,将原来必须由classpath完成的类路径搜索功能,很巧妙地转移到import的身上,从而使classpath的设置简洁明了。我们先看下面的例子。

 

18. 先在Hello.java中导入DF.Person。代码修改如下:

 

import DF.Person;

 

public class Hello {

public static void main(String[] args) {

Person person = new Person("Mike");

System.out.println(person.getName());

}

}

 

再将DF子文件夹中的Person.java设置一个DF包。代码修改如下:

 

package DF;

 

public class Person {

private String name;

public Person(String name) {

this.name = name;

}

 

public String getName() {

return name;

}

}

 

好了,神奇的命令行出现了:

 

javac -classpath "C:\Java Test" "C:\Java Test\Hello.java"

java -classpath "C:\Java Test" Hello

 

尽管这次我们只设置了C:\JavaTest的classpath,但编译及运行居然都通过了!事实上,Java在搜索.class文件时,共有三种方法:

一是全局性的设置,详见第12步,其优点是一次设置,每次使用;

二是在每次的javac及java命令行中自行设置classpath,这也是本文使用最多的一种方式,其优点是不加重系统环境变量的负担;

三是根据import指令,将其内容在后台转换为classpath。JDK将读取全局的环境变量classpath及命令行中的classpath选项信息,然后将每条classpath与经过转换为路径形式的import的内容相合并,从而形成最终的classpath.在我们的例子中,JDK读取全局的环境变量classpath及命令行中的classpath选项信息,得到C:\JavaTest。接着,将import DF.Person中的内容,即DF.Person转换为DF\Person,然后将C:\Java Test与其合并,成为C:\JavaTest\DF\Person,这就是我们所需要的Person.class的路径。在Hello.java中有多少条import语句,就自动进行多少次这样的转换。而我们在命令行中只需告诉JDK最顶层的classpath就行了,剩下的则由各个类中的import指令代为操劳了。这种移花接木的作法为我们在命令行中手工地设置classpath提供了极大的便利。

 

应注意的一点是,import指令是与package配套使用的,只有在某类通过“packagepacakgename;”设定了包名后,才能给其他类通过import指令导入。如果import试图导入一个尚未设置包的类,JVM就会报错。

 

19. 我们接下来看,当使用JDK类库时,classpath如何设置。

 

20. 修改Hello.java,内容如下:

 

import DF.Person;

import java.util.Date;

 

public class Hello {

public static void main(String[] args) {

Date date = new Date();

System.out.println(date);

 

Person person = new Person("Mike");

System.out.println(person.getName());

}

}

 

21. JDK类库存放于C:\ProgramFiles\Java\jdk1.5.0\jre\lib\rt.jar文件中。关于jar文件的介绍,已经超出了本文的范围,感兴趣的读者可以阅读Horstmann写的CoreJava一书。

 

jar文件可以用WinRar打开。用WinRar打开后,可以看到里面有一些文件夹,双击其中的java文件夹,再双击util的文件夹,可以在看到Date.class文件就在其中。如果你看过Data.java或其他JDK类库的源码(在C:\ProgramFiles\Java\jdk1.5.0\src.zip文件中),你就会发现,像java、util这些文件夹均是package。这也是Hello.java第2行中使用了import指令的原因。

 

我们可以通过WinRar的查找功能来定位某个类所在的包。在“查找文件”的窗口中的“要查找的文件名”文本框中输入Date.class,就会查找出在rt.jar文件中存在两个Date.class文件,一个是java\sql\Date.class,另一个是java\util\Date.class。其中,sql下面的Date.class文件与数据库有关,并非我们这里所需,java\util\Date.class才是我们所要的。

 

rt.jar文件就像本文中的C:\JavaTest中一样,是JDK类库的唯一入口。我们可以在命令行的classpath选项指定.jar文件。需要注意,.jar文件的classpath设置有些特珠。在以前的例子中,我们设置classpath时都是设置了路径就行了,而对于.jar文件,我们必须将.jar文件名直接加到classpath中。

 

22. 在命令行输入

 

javac -classpath "C:\ProgramFiles\Java\jdk1.5.0\jre\lib\rt.jar";"C:\Java Test" "C:\JavaTest\Hello.java"

java -classpath "C:\ProgramFiles\Java\jdk1.5.0\jre\lib\rt.jar";"C:\Java Test" Hello

 

这样当然没有问题,因为我们指定了rt.jar文件及C:\JavaTest两个classpath。但且慢,在命令行输入:

 

javac -classpath "C:\Java Test" "C:\Java Test\Hello.java"

java -classpath "C:\Java Test" Hello

 

不可思议的是,编译及运行成功了!令人惊讶的是在我们将classspath只设置为C:\JavaTest的情况下,JDK如何得出java.util.Date的classpath?

 

原因在于,就像java的Path路径已经悄悄在后台设置好一样,rt.jar的classpath路径也悄悄地在后台设置了。因此,我们不必多此一举手工设置其classpath了。

 

23.最后一点需要谈到的是,如果主类恰好也在一个package中(在大型的开发中,其实这才是一种最常见的现象),那么java命令行的类名前面就必须加上包名。

 

在C:\Java Test下面新建一个文件夹,名为NF。将C:\JavaTest下面的Hello.class删除,将Hello.java移到NF文件夹下。打开NF文件夹下的Hello.java,为其设置package属性。

 

package NF;

 

import DF.Person;

import java.util.Date;

 

public class Hello {

public static void main(String[] args) {

Date date = new Date();

System.out.println(date);

 

Person person = new Person("Mike");

System.out.println(person.getName());

}

}

 

编译与以前没啥区别,只不过是修正一下改过之后的路径。

 

javac -classpath "C:\Java Test" "C:\Java Test\NF\Hello.java"

 

而java命令行却有了变化

 

java -classpath "C:\Java Test" NF.Hello

 

上面命令行语句中,NF.Hello告诉JDK,Hello.class在NF的package下面。

 

至此,本文有关classpath及package的问题的讨论已经全部结束。由此可见,Java的入门的确非常不易。如果初学Java的程序员一见到Java的编译竟是如此的复杂,多半就会抽身而退。因此,笔者认为,Sun在J2SE的Tutorial中故意将编译的问题尽量简单化,以吸引更多的Java初学者。一旦品尝了Java的香醇可口的美味后,就不用担心他们退出了,因为咖啡是非常容易让人上瘾的。

 

文章出处:http://blog.163.com/zhouru729@126/blog/static/82764270200711423542180/

分享到:
评论

相关推荐

    java动态添加外部jar包到classpath的实例详解

    主要介绍了java动态添加外部jar包到classpath的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    web.xml中如何设置配置文件的加载路径实例详解

    web.xml中如何设置配置文件的加载路径实例详解 web应用程序通过Tomcat等容器启动时,会首先加载web.xml文件,通常我们工程中的各种配置文件,如日志、数据库、spring的文件等都在此时被加载,下面是两种常用的配置...

    Spring mvc实现Restful返回json格式数据实例详解

    PS:在spring 3 中,要输出json数据,只需要添加Jackson 库到你的classpath。 1、项目依赖 spring和jackson的依赖: <project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:xsi=http://www.w3.org/2001

    Spring组件自动扫描详解及实例代码

    Spring组件自动扫描详解及实例代码 问题描述 一个系统往往有成千上万的组件,如果需要手动将所有组件都纳入spring容器中管理,是一个浩大的工程。 解决方案 Spring 提供组件扫描(component scanning)功能。它能...

    JAVA技术和一些简单实例

    一个简单的Servlet--产生存文本、classpath详解(谨献给那些找不到北的朋友)、J2EE配置指南、Java Socket编程、JDBCTM 指南、WebSphere快速入门等等,希望有你所需要的!

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下...

    swing界面设计之JTree

    下载依赖的 JAR 文件并在 Eclipse 的 classpath 中定义这种依赖性 15 创建 to-do 列表:基本的 Swing 和 Spring 应用程序设置 17 创建 MainFrame、Launcher 和 ToDo 类 17 创建 Spring app-context.xml bean 定义...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

    Spring中文帮助文档

    3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用...

    Spring API

    3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用...

    疯狂JAVA讲义

    1.5.4 根据CLASSPATH环境变量定位类 15 1.6 Java程序的基本规则 16 1.6.1 Java程序的组织形式 16 1.6.2 Java源文件的命名规则 17 1.6.3 初学者容易犯的错误 18 1.7 垃圾回收机制 20 1.8 何时开始使用IDE工具 ...

    iuhyiuhkjh908u0980

    ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?> <!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) --> by duzn 2007-04-02 回复 (0) Antenna与j2me...

Global site tag (gtag.js) - Google Analytics