1、项目常用注解:
Service层
imp:@Transactional
@Component("xxxService")
public class xxxService {.....}
interface:
DAO层
@Repository("xxxDao")
@Autowired
@Qualifier("xxxDAO")
public class XxxDAO{.....}
常用注解含义:
@Autowired:
//spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法.
//在applicationContext.xml中加入:
// <!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
@Qualifier :
注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常。
两者结合:@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了
Spring 自 2.0 版本开始,使用 @Repository、@Service、@Controller 和 @Component 将类标识为 Bean:
在配置文件中开启扫描器
代码如下:
<beans … >
……
<context:component-scan base-package=”bookstore.dao” />
……
</beans>
2、一般的框架都会有默认值的设置
1)使用commons-net包下的FTPClient类实现对ftp进行对文件夹的上传和下载中下载速度很快,而上传的速度却慢的可怕,是因为jar中源代码中FTP中有缓存默认值为1024字节导致的,而FTPClient中没有设置buffersize时会使用父类FTP中的静态变量中的缓存大小1024,只要将调用FTPClient的setBufferSize即可将缓存变大,减少io次数,批量读取数据,提高了上传效率.
3、前台传值到后台出现奇怪的多出了一个“,”现象,有时在前面,有时在后面
现象:采用form提交到后台Action时,自动注入到Action的属性后,发现该值后面多了个”,“,很多人会很奇怪,开始可能没有注意到,但是查询时发现了该问题后跟踪后台代码发现前台传到后台时已经是多了一个”,“。
原因:前台jsp页面提交form中有两个name相同的标签,提交时同时提交后台,将多个name一样的以逗号分隔,而最后一个或第一个值为空字符串,将重名的name修改为不同即可
示例代码:
限制:被拷贝的对象中不能有值为null的属性,否则报错
示例代码:
BeanUtils.copyProperties(Object dest, Object orig);
12、对xml的数据解析为map结构存放数据,为了简单可以将子标签中多个内容以符号分隔整体作为value,对于其中的内容需要进一步的分析。
13、将固定的并且共用的代码而且不希望被修改,放到压缩包中,不被MyEclipse管理,当项目启动时进行解压缩部署到服务器上,不影响功能
14、使用Iterator遍历迭代集合时,如果使用remove方法时,需要调用Iterator对象的remove方法,不要使用集合对象的remove方法,否则就失去了使用迭代器的意义了,反而会造成问题。
15、尽量避免使用substring,对于循环加字符串的情况,最后一个分隔符一般采用substring或每次判断是否最后一次的方法,如果循环中的项可以乱序的话则可以那些固定的字段放到最后一个,如表主键id,从而避免使用substring
16、异常处理
编写公共的方法是,建议在方法内部对异常进行捕获,除非上层代码需要获取异常,否则如果调用方没有对异常做处理的话,该异常会一直往上抛出,导致上层方法逻辑被破坏,有些情况是不希望被异常打破的,如下载上传文件,一个失败了后面的还是需要进行的。