包住
就会自动绑定mybean, 自动绑定mybean的所有同名属性到普通html标记input, selectbox, checkbox,radiobox.....在这些input框里不用再写任何代码…
10)Ajax:DWR
J2EE应用最常用的ajax框架
11)报表 图表
Eclipse BIRT功能比较强大,也很庞大..好几十M,一般没有特别需求或别的图表设计软件可以解决的不用它
JasperReports+ iReport是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。JasperReports支持PDF、 HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。
JFreeChart主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
琴棋报表,国产的..重点推荐,适合中国的情况,开放源代码,使用完全免费。纯JAVA开发,适用多种系统平台。特别适合B/S结构的系统。官方网站有其优点介绍,看来用它还是不错的选择,最重要的是支持国产呵呵
4:权限控制: Acegi
Acegi是Spring Framework 下最成熟的安全系统,它提供了强大灵活的企业级安全服务,如完善的认证和授权机制,Http资源访问控制,Method 调用访问控制等等,支持CAS
(耶鲁大学的单点登陆技术,这个单点登陆方案比较出名.我也进行过配置使用,可以根据项目需要,如果用户分布在不同的地方不同的系统通用一套登陆口令可以用它进行解决,一般注册机登陆机就是这样解决的)
Acegi只是于Spring结合最好的安全框架,功能比较强大,当然还有一些其他的安全框架,这里列举一些比较流行的是我从网上找到的,使用方法看其官方文档把…
JAAS, Seraph, jSai - Servlet Security, Gabriel, JOSSO, Kasai, jPAM, OpenSAML都是些安全控制的框架..真够多的呵呵
5:全文检索
1) Lucene
Lucene是一套全文索引接口,可以通过它将数据进行倒排文件处理加入索引文件,它的索引速度和查询速度是相当快的,查询百万级数据毫秒级出结果,现在最火的Apache开源项目,版本更新速度很快现在已经到了2.0,每个版本更新的都比较大,目前用的最多的版本应该是1.4.3,但它有个不太方面的地方单个索引文件有2G文件限制,现在 2.0版本没有这个限制,我研究的比较多,它的扩展性比较好,可以很方面的扩充其分词接口和查询接口.
基于它的开发的系统很多,比如最常用的Eclipse的搜索功能,还有一些开源的软件比如Compass,Nutch,Lius,还有我最近做的InSearch(企业级FTP文件网页搜索)
6:公共Util类
主要是Jakarta-Commons类库,其中最常用得是以下几个类库
1) Jakarta-Commons-Language
最常用得类是StringUtils类,提供了使用的字符串处理的常用方法效率比较高
2) Jakarta-Commons-Beantuils
主要用Beantuils能够获得反射函数封装及对嵌套属性,map,array型属性的读取。
3) Jakarta-Commons-Collections
里面有很多Utils方法
7 日志管理
Log4J
任务是日志记录,分为Info,Warn,error几个层次可以更好的调试程序
8 开源的J2EE框架
1) Appfuse
Appfuse是Matt Raible 开发的一个指导性的入门级J2EE框架, 它对如何集成流行的Spring、Hibernate、iBatis、Struts、Xdcolet、JUnit等基础框架给出了示范. 在持久层,AppFuse采用了Hibernate O/R映射工具;在容器方面,它采用了Spring,用户可以自由选择Struts、Spring/MVC,Webwork,JSF这几个Web框架。
2) SpringSide
.SpringSide较完整的演示了企业应用的各个方面,是一个电子商务网站的应用 SpringSide也大量参考了Appfuse中的优秀经验。最重要的是它是国内的一个开源项目,可以了解到国内现在的一些实际技术动态和方向很有指导意义…
9:模版 Template
主要有Veloctiy和Freemarker
模板用Servlet提供的数据动态地生成 HTML。编译器速度快,输出接近静态HTML 页面的速度。
10:工作流
我所知道比较出名的主要有JBpm Shark Osworkflow,由于对它没有过多的研究所以还不是很清楚之间有什么区别.
项目管理软件
dotProject:是一个基于LAMP的开源项目管理软件。最出名的项目管理软件
JIRA: 项目计划,任务安排,错误管理
Bugzilla:提交和管理bug,和eclipse集成,可以通过安装MyEclipse配置一下即可使用
BugFree借鉴微软公司软件研发理念、免费开放源代码、基于Web的精简版Bug管理
CVS:这个就不介绍了都在用.
SVN: SubVersion已逐渐超越CVS,更适应于JavaEE的项目。Apache用了它很久后,Sourceforge刚刚推出SVN的支持。
测试用例:主要JUnit单元测试,编写TestCase,Spring也对Junit做了很好的支持
后记:
以Spring为主的应用开发可选用的组件中间件真是眼花缭乱,所以针对不同的项目需求可以利用不同的开源产品解决,比如用Spring+Hibernate/ iBATIS或Spring+WebWork+Hibernate/ iBATIS或Spring+Struts+Hibernate/ iBATIS,合理的框架设计和代码复用设计对项目开发效率和程序性能有很大的提高,也有利于后期的维护.
发表于 @ 2006年09月19日 10:06 PM | 评论 (0)
Spring学习笔记二
BeanFacory
所有bean factory的父接口,提供了创建bean和管理bean的生命周期的方法
HierarchicalBeanFactory
实现了factory的继承体系,可以通过factory的父factory查找bean
ListableBeanFactory
提供了对factory中的bean的遍历访问方法,但不会从factory的继承关系中查找。
AutowireCapableBeanFactory
提供对一个已经存在的对象进行dependency injection的功能;或者利用反射机制,根据一个类的全名
对它进行injection并返回它
ConfigurableBeanFactory
可以在初始化阶段对factory进行一些额外的配置
Application Context
功能更强大的factory bean。主要特性:General framework-oriented usage style,MessageSource
support,Support for application and framework events,ResourceLoader support。
定义Bean
Identifier
可以用id或name属性来定义bean。id的类型为XML IDREF,可以在xml解析时校验ref的有效性,但其中
只能由数字/字符或者'_',不能包含空格。name属性则没有这个限制,而且可以用','同时定义多个标识
符。如果定义了多个标识符,他们被认为是同义的。
创建bean的三种方式
class;class+static factory method;factory bean+factory method
Singleton versus prototype bean
默认情况下容器创建的bean为singleton,这就要求bean被设计成无状态、线程安全的,容器会保持对
这种bean的引用;prototype bean可以有多个实例,容器不会保持对它们的引用
指定bean的依赖性
可以同时使用constructor injection和setter injection进行dependency injection
bean初始化的校验过程中可能会抛出异常
默认情况下,容器会对singleton bean进行pre-instantiation,以提前发现创建bean时可能出现的错
误,可以通过设置lazy-init属性来改变这种处理方式
容器内置了一些类型转换器用于将String类型的值转换为需要的类型,也可以注册自定义的类型转换器
可以设置Collection类型的属性,如List,Set,Map,Properties等,而且可以任意嵌套
可以基于名称或者类型匹配进行隐式注入(autowiring)
property标签中可用的子标签
(bean | ref | idref | list | set | map | props | value | null)
ref标签
分三类:local,bean,parent。local只能引用当前xml中定义的bean;bean可以引用当前和外部xml中定
义的bean;parent只能引用父factory中定义的bean
value标签
指定属性的值。如果要将属性设置为null,必须使用标签。否则被认为是""
list,set,map,props标签
使用它们时,对应的Java类的属性的类型必须为List,Set或Map,而不能是specific type如ArrayList.
如果一定要使用可以选择ListFactoryBean,SetFactoryBean,MapfactoryBean等factory bean
bean标签
用来定义inner bean。这个bean只被包含它的bean使用,且一定是prototype的。
改变bean的初始化顺序
使用depends-on属性定义需要先初始化的bean
Autowiring Dependencies
基于反射实现,通过autowire属性设置,共有五个级别。很容易造成混乱,需慎用
no:默认值,不使用autowiring
byName:通过Java类中属性的名称在factory中查找同名的bean,可以通过设置dependencycheck来改变
查找不匹配时的处理方式。
byType:通过Java类中属性的类型在factory中查找同类型的bean,若匹配的数量超过一个则报错,可以
通过设置dependencycheck来改变查找不匹配时的处理方式。
constructor:对Java类中定义的每个constructor,通过参数类型在factory中查找bean,使用最匹配的
那个constructor
autodetect:如果Java类有无参constructor,使用byType,否则使用constructor
bean的依赖性校验
可以通过设置dependency-check属性来改变校验级别,共四个:
none:默认的级别,不进行校验
simple:校验primitive type和collections类型的属性
object:校验除primitive type和collections以外的类型的属性
all:校验所有类型的属性
管理bean的生命周期
container-driven的bean的生命周期如下:
Bean is instantiated-bean通过构造器或者工厂方法被实例化
Dependencies injected-依赖注入
setBeanName(),setBeanFactory(),setResourceLoader(),setApplicationEventPublisher
(),setMessageSource(),setApplicationContext()等方法被调用-如果bean实现了对应的接口,则这些方
法被调用(BeanNameAware,BeanFactoryAware,...)
Bean post-processors get "before-initialization" callback-在容器中注册过的post-processor的
方法被调用
afterPropertiesSet() called-如果bean实现了InitializingBean接口
Declared init method called-bean的声明中指定了init-method
Bean post-processors get "after-initialization" callback-在容器中注册过的post-processor的
方法被调用
Bean is used-容器只会保持对singleton bean的引用,所以下面的过程prototype bean不会参与
Bean destruction begin-bean被销毁的顺序和初始顺序相反
Bean post-processors get "destroy" callback-在容器中注册过的post-processor的方法被调用
destroy() called-如果bean实现了DisposableBean接口
Declared destroy method called-如果bean的声明中指定了destroy-method
FactoryBean接口
用来创建其他对象的bean。当其他bean使用[标签引用或者通过getBean()方法得到FactoryBean时]
,容器返回的不是这个bean本身,而是通过它的getObject()方法得到返回对象。若想得到FactoryBean本
身,可以在它的名字前加'&',如getBean("&aFactoryBean")。
Spring中内置的FactoryBean:
JndiObjectFactoryBean-用于JNDI查找的factory bean
ProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供一些额外的功能
TransactionProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供事务处理功能
RmiProxyFactoryBean-使用代理机制,返回一个被“包装”过的类,提供远程方法调用
LocalSessionFactoryBean-配置并返回一个Hibernate SessionFactory对象
LocalStatelessSessionProxyFactoryBean,SimpleRemoteStatelessSessionProxyFactoryBean-使用代
理机制,返回一个被“包装”过的类,提供访问无状态Session Bean的功能
MethodInvokingFactoryBean-返回另一个bean的方法调用的结果
FieldRetrievingFactoryBean-返回另一个bean的属性的值
JMS-related factory beans-返回处理JMS资源的对象
Child Bean的定义
使用parent=xxx来指定parent bean。
child bean从parent bean中继承了属性、构造器参数的定义,如果定义child bean时指定了不同的
class,则这个class必须包含对应的属性或者有满足对应参数的构造器
不会从parent bean继承的属性:depends-on,autowire,dependency-check,singleton,lazy-init
Leave a comment