1. 简单叙述一下Spring中BeanFactory与ApplicationContext的差别
简而言之,BeanFactory提供了配置框架和基本的功能, 而 ApplicationContext为它增加了更强的功能,这些功能中的一些或许更加接近J2EE并且围绕企业级应用。一般来说,ApplicationContext是 BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext
相对于BeanFactory而言,ApplicationContext 提供了以下扩展功能.
(a) 国际化支持
(b) 资源访问
(c) 事件传播
(d) 多实例加载
2. 写一段程序,读取classpath下的一个xml文件,并解析
(1)Resource resource=new ClassPathResource("appcontext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
(2)ClassPathXmlApplicationContext appcontext=new ClassPathXmlApplicationContext("appcontext.xml");
BeanFactory factory=(BeanFactory)appcontext;
3. 谈一下OpenSessionInView模式,并分别谈一下在使用这个模式和不使用这个模式的情况下,Transaction、数据库连接、Hibernate Session这三者之间的开启和关闭的顺序
这个名字听起来好像很高深,笔者第一次接触到这个名词感觉,哇塞,spring哪整地那么多的技术框架啊,但是真正踏踏实实的看过几篇文章以后,感觉网上说的都是很抽象,而且好像故意说得那么高深,让读者不知所措,好像这样才能认为spring是个太牛的东西,其实,这个东西很简单。下面我简单说明下。
其实在项目里面真正的精华就是web.xml里面的这几行代码:
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter- class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
好啦,一切ok了。接下来的就有spring容器来帮我们做了。有的人也许会问了,你说得也太简单了吧?简单的让我不能相信了。其实不然,越复杂的东西有时候往往就是一句话的事。听我慢慢道来。
这个属性就是为了支持hibernate的延迟加载而设计的,spring倡导的是面向接口编程,而且在源文件里面大量的使用了Factory-mode 和Singleton-mode。但是这就和hibernate的延迟加载产了冲突。如果不使用hibernate的 OpenSessionInViewFilter过滤器,那么当使用完getHibernateTemplet().save()或者delete()对象以后,spring会自动的关闭session。即使你使用了延迟加载的机能,spring也不会管你那套的。该关的session一刻也不等。当你想延迟加载某些类的某些设置为延迟加载的属性以后,spring就会报出session is close的错误,这该死的spring。为了优化系统的启动速度我才延迟的,为什么你这么不通情达理?不然,使用了 OpenSessionInViewFilter以后,当你save完一个对象以后,因为有这个过滤器,所以spring会把这个连接放到线程池里面,而不是马上就关闭。当需要延迟加载的时候,spring会从线程池里面取出那个session完成加载的动作。当确定这个session确实不再需要的时候,spring才会close掉这个session。原理就是这么简单。我们只需要做的就是在web.xml里面配置那几行代码,其他的就按照我们预期的做,spring会自动帮我们完成我们想要的。简单吧?
4. 说说在hibernate中使用Integer做映射和使用int做映射之间有什么差别
Integer code和int code;的区别:
Integer是对象. code = null; 对象可以为空.
int 是普通类型, 不可能 = null.
根据你的数据库code是可以空的, 故应该映射成Integer.
你没理由hbm.xml里写Integer, 类里却写int