工作笔记总结——后台代码部分
2013-05-11 12:25
295 查看
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 了
@Resource:
它的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
Spring 自 2.0 版本开始,使用 @Repository、@Service、@Controller 和 @Component 将类标识为 Bean:
在配置文件中开启扫描器
代码如下:
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修改为不同即可
4、对txt文档流进行拷贝时换行时"\r\n",unix中为“\n"
5、java反射
示例代码:
Class c = Class.forName("ClassName");
Method m = c.getMethod("methodName", new Class[]{方法的参数类型,没有参数的话什么也不写});
m.invoke(c, new Object[]{方法实参列表});
6、struts工作流程
jsp --> 类型转换 --> validate校验(配置文件、代码),首先执行ActionSupport中的validate方法,如果Action中的方法中有以validateXXX,其中XXX为Action中的业务方法时,会在执行XXX方法前执行validateXXX方法
--> 执行XXX方法
7、涉及事物的操作需要写到service层控制,spring将事务控制放到service层上
8、从集合对象中移除某个元素最好用迭代器,比较安全
9、Token令牌解决重复提交
10、tomcat 的URIEncoding的作用
在tomcat5中,为了保证get方式提交的数据采用utf-8编码,在server.xml配置文件中进行如下设置
1)在werver.xml中的8080端口中加入URIEncoding=”utf-8“
2)对URL进行编码
11、采用BeanUtils实现对象之间的属性拷贝
限制:被拷贝的对象中不能有值为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、异常处理
编写公共的方法是,建议在方法内部对异常进行捕获,除非上层代码需要获取异常,否则如果调用方没有对异常做处理的话,该异常会一直往上抛出,导致上层方法逻辑被破坏,有些情况是不希望被异常打破的,如下载上传文件,一个失败了后面的还是需要进行的。
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 了
@Resource:
它的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照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修改为不同即可
4、对txt文档流进行拷贝时换行时"\r\n",unix中为“\n"
5、java反射
示例代码:
Class c = Class.forName("ClassName");
Method m = c.getMethod("methodName", new Class[]{方法的参数类型,没有参数的话什么也不写});
m.invoke(c, new Object[]{方法实参列表});
6、struts工作流程
jsp --> 类型转换 --> validate校验(配置文件、代码),首先执行ActionSupport中的validate方法,如果Action中的方法中有以validateXXX,其中XXX为Action中的业务方法时,会在执行XXX方法前执行validateXXX方法
--> 执行XXX方法
7、涉及事物的操作需要写到service层控制,spring将事务控制放到service层上
8、从集合对象中移除某个元素最好用迭代器,比较安全
9、Token令牌解决重复提交
10、tomcat 的URIEncoding的作用
在tomcat5中,为了保证get方式提交的数据采用utf-8编码,在server.xml配置文件中进行如下设置
1)在werver.xml中的8080端口中加入URIEncoding=”utf-8“
2)对URL进行编码
11、采用BeanUtils实现对象之间的属性拷贝
限制:被拷贝的对象中不能有值为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、异常处理
编写公共的方法是,建议在方法内部对异常进行捕获,除非上层代码需要获取异常,否则如果调用方没有对异常做处理的话,该异常会一直往上抛出,导致上层方法逻辑被破坏,有些情况是不希望被异常打破的,如下载上传文件,一个失败了后面的还是需要进行的。
相关文章推荐
- 工作笔记总结——使用sonar进行代码优化
- Ajax (部分二:prototype.js代码后半部分)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- Ajax (部分二:prototype.js代码)总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- Ajax (部分二:prototype.js代码前半部)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- Ajax (部分二:prototype.js代码前半部)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- Ajax (部分二:prototype.js代码后半部分)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- Ajax (部分二:prototype.js代码)总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
- 读代码大全二笔记之关于设计启发得总结
- 工作笔记:单例模式的作用好处和代码
- 【工作笔记0010】asp.net后台Request.QueryString获取的url中文参数乱码解决方案
- 读Effective Objective-C [提高OC代码质量总结笔记第一篇:熟悉OC]
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 六、可以工作的类
- 实习笔记: 实习第二天工作总结
- 总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)
- ActiveReports工作总结8——用代码控制布局
- 一起谈.NET技术,ASP.NET前台代码绑定后台变量方法总结
- 【代码笔记】获取系统完成任务所需的后台时间
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)
- 工作笔记--UI部分
- php中文乱码问题以及页面显示部分后台代码问题