众所周知spring框架是一个非常优秀的轻量级框架工具,我们借助它可以简单的将软件各个部分割裂开以实现较低的耦合度。
那么我们在有些时候强外界发布这些软件时面临着一个选择--是否将spring的相关包一起发布,如果全部一齐发布则可能使原本非常小巧的程式变得非常庞大;
如果不发布则可能使客户端面临程式工作环境配置的复杂程度加大,在这里主要是spring框架的下载、配置和使用。
基于以上情况我们选择一个折衷的办法:将spring工作必须的基本类文件和相关配置文件与我们的程式一起发布出去。在这里的问题就主要是包的选择(类相互的依赖关系)和框架类的一些配置文件的选择使用。
由于我的经历有限,在此我就将我写的一个第三方eclipse插件管理器所面临的一些问题以及获得的经验和大家分享一下。在这里我将用一个简单的spring例子作为替代说明即可。
Ubuntu 7.10 Linux
Eclipse Platform Version: 3.3.0 + MyEclipse 6.0
其中spring框架的加载和配置是通过MyEclipse的插件(MyEclipse-->Project Capabilities-->Add Spring ...-->Spring 2.0 Core ...)实现的。
以下是一个简单的spring使用的程式代码:
< beans
xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
< bean id ="HelloWorld" class ="springapp.hello.HelloWorld" >
< property name ="message" >
< value > world </ value >
</ property >
</ bean >
</ beans >
public interface Hello {
public String sayHello();
}
public class HelloWorld implements Hello {
private String message;
public HelloWorld() {
message = null ;
}
public String sayHello() {
return " Hello " + message + " ! " ;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this .message = message;
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import springapp.hello.Hello;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
" /src/applicationContext.xml " );
Hello h = (Hello)ctx.getBean( " HelloWorld " );
System.out.println(h.sayHello());
}
}
最后运行Main类就会显示一些信息:
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Refreshing org.springframework.context.support.FileSystemXmlApplicationContext
@f3d6a5: display name
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
; startup date [Thu Feb 14 14:50:55 CST 2008]; root of context hierarchy
2008 - 02 - 14 14 : 50 : 56 , 013 INFO
[ org.springframework.beans.factory.xml.XmlBeanDefinitionReader ]
- Loading XML bean definitions from file
[ /home/wpc/workspace/Java/MyStudy/SimplifySpringCoreJar/src/applicationContext.xml ]
2008 - 02 - 14 14 : 50 : 56 , 197 INFO
[ org.springframework.context.support.FileSystemXmlApplicationContext ]
- Bean factory for application context
[ org.springframework.context.support.FileSystemXmlApplicationContext@f3d6a5 ]
: org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
2008 - 02 - 14 14 : 50 : 56 , 210 INFO
[ org.springframework.beans.factory.support.DefaultListableBeanFactory ]
- Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540
: defining beans [ HelloWorld ] ; root of factory hierarchy
Hello world!
由于有个log配置文件的问题可能有些程式运行会有警告信息,这个不要紧,不再讨论范畴。
我的解决方案是:
# For all other servers: Comment out the Log4J listener in web . xml to activate Log4J .
log4j . rootLogger = INFO , stdout , logfile
log4j . appender . stdout = org . apache . log4j . ConsoleAppender
log4j . appender . stdout . layout = org . apache . log4j . PatternLayout
log4j . appender . stdout . layout . ConversionPattern = %d %p [%c] - %m%n
log4j . appender . logfile = org . apache . log4j . RollingFileAppender
# The log file's location
log4j . appender . logfile . File = springframe_log . log
log4j . appender . logfile . MaxFileSize = 512KB
# Keep three backup files .
log4j . appender . logfile . MaxBackupIndex = 3
# Pattern to output: data priority [category] -message
log4j . appender . logfile . layout = org . apache . log4j . PatternLayout
log4j . appender . logfile . layout . ConversionPattern = %d %p [%c] - %m%n
文件命名为log4j.properties然后打包jar并且导入即可。
但是如果将这个工程导出,一般是不携带spring框架类文件的,这时在外部运行Main类就可能出现问题,一般提示是spring相关的类文件无法找到。
我当时就是通过这样一些错误信息一步步补全我的spring基础类文件的,应该有相关的工具但是我没有找到。
在这里我就将我的结果给大家:
*/可能可以再次简化,但是我没有继续进行,如果有兴趣可以继