❈ 当下流行的两种企业开发MVC开源框架SSH和SSM,小面由小编来说说它们的不同
框架比较方面问题:
1.SSH 和 SSM 的区别:
> ✪ SSH 指的是 : Struts2 (做前端控制器)+ spring (管理各层的组件) + Hibernate (负责持久化层)
> ✪ SSM 指的是: SpringMVC (做前端控制器) + Spring (管理各层的组件) + MyBatis (负责持久化层)
**实现原理图表结构:
2.Struts2 和 SpringMVC 的区别:
1.区别:
** Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter 。
** SpringMvc 的核心是基于一个Servlet即DispatcherServlet (前端控制器)。
2.SpringMvc会比Struts2快些
** SpringMvc 是基于方法设计的。
** Struts2 是基于类的,每次发一次请求都会实例一个Action。
3.SpringMvc 使用更简洁开发效率比Struts2高,支持JS303,处理ajax请求更方便。
4.Struts2 采用的是值栈存储请求以及响应数据,OGNL存取数据,OGNL表达式使页面的开发效率比SpringMVC更高。
3.Hibernate 和 MyBatis 的区别:
两者均为ORM框架,但也有一些不同
hibernate | mybatis |
重量级 | 轻量级 |
全自动化 | 半自动化 |
hql(但也可以使用sql,但违背了hibernate的初衷) | sql |
无缝移植 | 扩展性、迁移性比较差 |
总结两者区别:
<开发效率方面:>
①. hibernate开发中,sql语句已经被封装了,可以直接拿来使用,可以加快系统开发。
②. Mybatis属于半自动化,sql语句需要手工完成,稍微有点繁琐。
<SQL优化方面:>
①. Hibernate自动生成SQL,有些语句较为繁琐,会多消耗一些性能。
②. MyBatis手动编写SQL,可以避免不需要的查询,提高系统性能。
<对象管理方面:>
①. hibernate是完整的ORM框架,开发过程中,无需过多关注底层实现,只需要管理对象即可。
②. MyBatis需要自行管理映射关系。
Spring问题:
1. 什么是Spring,有什么优点?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
《 2 》优点:
①. 使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑。
②. 可以提供众多服务,事务管理,WS等。
③. AOP的很好支持,方便面向切面编程。
④. 对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等
⑤. Spring DI机制降低了业务对象替换的复杂性。
⑥. Spring是非侵入式的,代码污染极低。
⑦. Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部
2.对AOP和IOC的理解:
IOC : “控制反转”,也称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度。
程序的耦合:
调用者与被调用者的依赖关系
比如:程序员A负责编写A类,程序员B负责B类开发,A类的某些功能需要实例化B类的对象调用其
方法才能完成,那么A类就依赖B类,如果程序员B不写B类 难道程序员A要一直等下去吗?
企业开发的原则:
"编译时不依赖,运行时才依赖"
public class PersonServiceBean{
private PersonDao personDao=new PersonDaoBean();
public void save(Person person){
personDao.save(person);
}
}
PersonDaoBean 是在应用内部创建及维护的,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
**DI:*****依赖注入
当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean类可以改成
public class PersonServiceBean{
private PersonDao personDao;
//通过构造参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入
public PersonServiceBean(PersonDao personDao ){
this.personDao=personDao ;
}
public void save(Person person){
personDao.save(person);
}
}
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
IOC: “面向切面编程”
什么是面向切面编程呢?
在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),这是我们就可以封装一个封面,然后注入到目标对象(具体的业务逻辑)中去。息,这是我们可以写一个拦截器,在这个类中实现记录错误日志的功能,再在Spring的xml配置文件中配置一个对这些要记录日志的方法的AOP拦截器,在这个方法执行后调用这个拦截器来记录日志。这样就不用每次抛出异常都要手动的去单独处理记录,提高了程序的内聚性。这种在调用某个方法之前/后想要自动执行一系列自定义操作的就是AOP思想 。这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
简单的说就是在不改变原程序的基础上为代码增加新的功能,对代码进行增强处理。
3.Spring注入方式有哪些?
①. setter注入 ②. 构造注入 ③. 接口注入
4.可以在spring中注入null或者空字符串吗?
可以:
注入null值
<property name="email"><null/></property>
注入空字符串:
<property name="email" value=""></property>
5.Spring如何配置数据库驱动?
①. 使用c3p0数据库连接池技术。
②. 使用DriverManagerDataSource数据源来配置数据库驱动。