技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!

 
    本期特邀知名作家、开源框架专家陈雄华老师,针对Spring学习过程中遇到的问题给予解答。欢迎网友积极提问,与专家一起讨论! 
 

【244期门诊集锦】入木三分、鞭辟入里掌握Spring_第1张图片

查看本期门诊精彩实录:http://doctor.51cto.com/develop-258.html

精选本期网友提问与专家解答,以供网友学习参考。

Q:老师好:如何学习Spring?需要掌握哪些知识?Spring 3.0比2.0有哪些差异及改进?
A:
1)核心API更新到Java 5.0
2)新增Spring表达式语言

3)可通过Java类提供IoC配置信息
4)通用类型转换系统和属性格式化系统
5)数据访问层新增OXM功能
6)Spring 3.0最令人振奋的一个增强是Spring MVC提供了对REST风格编程的支持
7)声明式模型验证,全面支持JSR-303的Bean验证API
8)对JavaEE 6的支持
9)支持内嵌的数据库

Q:老师您好:


学习Spring需要掌握哪些Java基础知识?如果深入了解并掌握Spring?

 

 


A:学习Spring需要掌握哪些Java基础知识?
   大致需要以下的知识:
   1)Java反射知识;
   2)Java动态代理知识;
   3) Java注解知识;
   4) PropertyEditor的知识;
   5) ThreadLocal的知识;
   6) 国际化消息的知识;
   这些Java基础知识在《Spring 3.x企业应用开发实战》中都有介绍,为读者做好的Java基础知识的铺垫,减少了读者阅读的难度。

 


  如果深入了解并掌握Spring?
  先尝试在项目中使用Spring,然后再有机会了解Spring的技术内幕,技术内幕在书的第3,5章有讲解,再此基础上建议你开始读读Spring的源码.读了Spring源码,一定会让你的Java功力和OOA,OOP能力大增!

 

Q:师好:您好,公司有个项目,其中一个LogicImpl里面执行了除常用biz logic之外的,侏儒去外网抓取一些数据,socket和其他系统之间的通信的功能(使用还比较频繁)。有一次,系统突然D了,一看,JDBC pool全满了。后来该类实现了spring的ApplicationContextAware接口,后面在用的时候就通过applicationcontex上下文的getBean去取本类的实例。这样就解决了。想必这个接口您应该也熟悉吧。区别在于改动后,吧一些操作交给了spring的来管理,限于原因,没仔细去追究,spring源码也一直没时间去细看。不知道您是否遇到过,能否详细的说明一下这个事情的原因?如果没遇到过,您也可以对这个接口说一下您自己的看法,谢谢
A:我的猜测是,你的这个业务类方法由于执行时间较长,他持有Connection的时间就长,所以并发性就差。 因此需要把数据库访问的逻辑放在一个事务方法中,数据访问完成后,就马上将连接释放给连接池。引入ApplicationContextAware后,通过getBean的方法和直接Autowried 是没有区别的,因此你的问题,我觉得还是没有彻底解决。我不知道,你原来这个LogicImpl是不是单实例的, 在Spring中管理的Bean都是单实例的,它可以有效提高并发性。建议你将对外网操作这些逻辑和数据库访问逻辑分开来,对外网的操作较重,可以放到一个异步操作中去做,不要和数据库访问放在一起,这样可以降低对数据库连接占用的时间,提高并发性。

Q:师你好:
在用SPRING管理数据库数据源时一般都会显示用户名和密码等敏感信息,用sping来加载数据源,如何保障安全性的问题?
A:这个问题很好,说明你对Spring的应用已经比较深了。可以覆盖PropertyPlaceholderConfigurer类的以下几个方法:
1) void convertProperties(Properties props):属性文件中的所有属性值都封装在props中,覆盖此方法,可以对所有的属性值进行转换处理。
2)String convertProperty(String propertyName, String propertyValue):在加载属性文件并读取文件中的每个属性时,都会调用此方法进行转换处理。
3)String convertPropertyValue(String originalValue):和上一个方法类似,只不过没有传入属性名。


Q:陈老师您好,我用SSH开发了两个企业门户系统,开发起来很容易,可正式上线后,就感觉系统速度不够流畅了,而且越运行就会越慢,人家服务商那边说我们的系统老是把他们的服务器内存跑爆掉,真不知道是什么原因引起的,不知Spring有没有什么好的解决方案?
A:
如果是互联网的项目,不在建议使用Hibernate,因为Hibernate对缓存的管理层面比较高,不方便做经细化的缓存管理。我现在的项目也是互联网项目,我是采用Spring MVC+Spring +myBatis+memcached+freemaker.
Spring本身是不会耗资源的,阿里巴巴就是使用Spring的。