0
点赞
收藏
分享

微信扫一扫

2013年工作中遇到的20个问题:121-140


 
121.Springz中,根据实现类找不到bean。

UserImpl implements User{
   
   }
   
    XmlWebApplicationContext context;
    context.getBean(User.class);√jav
 context.getBean(UserImpl.class);获取不到


 
 没有使用Cgilib库!
 
 --------貌似也不行------------
 因为spring的bean都是做了包裹的。所以你用 ServiceImpl 建立了一个bean,实际上他是新建了一个类似于 ServiceImplWrapper的继承 Service的接口的类来封装的,这样才能做到AOP的效果。
    所以新建的Bean,实际上是Spring新建的那个类型的,而不是ServiceImpl类型。因此只能用 Service接口寻找。
 
 但如果使用cglib的话,包裹类是直接继承ServiceImpl的,因此就可以找到了。
 --------------------
 按照类型找bean好像有专门的配置。 先看看文档吧。--------------------
 
 综上所述,目前没有找到原因。

122.SpringMVC 使用实体类User{Date date}不能接收“2013-7-24”这样的日期,
类型转换会失败。只能使用String接收,手动进行类型转换。

像 2013-09-31 这种字符串 把它parse为日期的时候,parse成 2013-10-01比较好,还是抛异常比较好?
simpledateformat 会将它parse成2013-10-01

public static Date parseDate(String date) {
  if(StringUtils.isEmpty(date)){
   return null;
  }
  
  SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-HH");
  Date d = null;
  try {
   d = format.parse(date);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return d;
 }123.


按名称搜索,需要使用 like '%aa%',而aa是Mybatis动态获得的。

##不对
<select id="searchBrand" parameterType="string" resultType="Integer">
  select id from organization where englishName like '%#{agencyName}%'
  and orgTypeId = 50004
 </select>
 
##官方例子,bind不识别,可能是 Mybatis新增的
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

只能在Java中设置了,agencyName="%"+agencyName+"%";

124.界面自适应宽度
大屏幕,普通笔记本

3个大屏幕合成1个超级大的“虚屛”

125.ssh 配置
我想通过Windows的Putty,配置ssh key来访问远程主机,没有配好。
最后,实在Linux下配了个,然后访问的。

126. 防火墙
Java通过 http连接 linux C++程序,失败。
防火墙 屏蔽了 端口。

127. 上传图片
我在使用阿里云上传,图片的时候,总是上传失败,提示"失败信息"。
连续2天都这样,我想阿里云的网站不可能一直出问题,所以我怀疑自己的图片出问题了。

经过分析和判断,最终发现 图片太大,有2M。

这让我想到Struts2和Spring中配置上传文件的最大值。

128. 日志性能
程序运行时,打印日志会降低程序的性能么?
把日志级别设置为error,info,debug,trace,对程序的性能有影响么?

打印日志太多了必然会降低性能啊
因为打印日志是IO操作,所以写程序时一定要注意好是 info还是debug。
线上运行的一般都是info。

129.  读取Excel文件
我的笔记本和公司的Linux服务器,读取1个具有8个sheet的Excel文件,需要6到11s。
而公司的1个项目,需要下载这种报表,后台数据计算就需要5到10s,客户要求总共时间在10s。
所以,只能提高前端的效率。

最终的解决方法:在系统初始化时,预先创建N个Workbook对象,缓冲起来。
启动1个定时器,检查Workbook对象个数,当达到最低值时,就再创建若干个,达到最大值。

有2点说明:
1.该项目的并发量很小,只要求20个,所以预先创建N个对象,是够用的。
空间换时间,在这种情况下是可行的。

2.Workbook对象,每用1个,就需要删掉。里面的数据已经变了,不能再次使用了。

130.SpringMVC使用 Map和实体类接收参数 各有千秋。
实体类编写比较繁琐,好处是 接收到参数后,类型已经转换成功了。

131.SpringMVC 处理全局异常。
@Component(提示:需要扫描这个异常所在的包)

public class OurException implements HandlerExceptionResolver {
 public ModelAndView resolveException(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex) {
   
 }

 也可以通过在xml文件中注册bean。
<bean class="××.exception.OurException">  </bean>

http://fuliang.iteye.com/blog/947191

132.严格按照顺序 构造SQL语句。
select
from
where
group by
having
order by
limit

133.mysql字符串比较时,不区分大小写
binary char,可以区分大小写
或者设置数据库的collate。

create database FansUnion default character set utf8 collate utf8_general_ci

SELECT * FROM User WHERE loginName = #{loginName} COLLATE utf8_bin

134.检验一个名字等是否重复时,需要排除自身这个实体。
比如有个叫 name的用户,修改name的时候,需要检验数据库是否存在重名,
这个时候应该排除name这个用户。

135.DateFormat setLenient
之前都没注意过有这么个方法,否则判断日期格式就太不靠谱了。
又是晦涩的单词:setLenient(false),严格匹配日期格式

136.json转换
JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性 因为JSONObject.toBean()把JSON字符串转换为一个自己定义的类,当其中属性有类似List , Map ,ArrayList的时候,麻烦就来了。

错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean

解决方法:
 
在JSONObject.toBean的时候
 
如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();
 
在classMap中put你要转换的类中的集合名,像:classMap.put("data", StoDataInfo.class);
 
当然也可以put一个集合类("data",Map.class)
 
然后在toBean()的时候把参数加上, 像:ShenTongInfo stInfo=(ShenTongInfo) JSONObject.toBean(o, ShenTongInfo.class, classMap);

http://www.111cn.net/jsp/Jsp-Servlet/41930.htm

137.Mybatis 原样输出${status} string类型的参数,会报 no getter方法,换成Map就没问题。

138.Spring解析${jdbc.driverClass}失败。
Could not load driverClass ${jdbc.driverClass} java.lang.ClassNotFoundException: ${jdbc.driverClass}

在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。

解决方法:Spring升级到3.1.1,Mybatis升级到3.1.1,mybatis-spring插件升级到1.1.1
使用"sqlSessionFactoryBeanName"而非"sqlSessionFactory"

<bean name="mapperScannerConfigurer_aa" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <!--  <property name="sqlSessionFactory" ref="sqlSessionFactory_aa"/> -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_aa"/>
        <property name="basePackage" value="..." />
        <property name="markerInterface" value="..." />
    </bean>


139.缩小filter的过滤范围。

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
/** 
 * 缩窄OpenSessionInViewFilter的过滤范围,请求css、js、图片等静态内容时不创建Session连接.  
 * 在web.xml中可配置excludeSuffixs参数,多个后缀名以','分割. 
 *  
 */

140.SpringMVC Controller方法接收Web请求参数。
使用@RequestParam这个注解。

让人意外的是:Integer和User等实体类,可以不使用这个注解。
而用Map接收参数时,必须使用@RequestParam这个注解。

默认使用@RequestParam Integer id,没有接收到id,会报错。
@RequestParam(required=false)表示id参数是可选的。


 

举报

相关推荐

0 条评论