❈ 当下流行的两种企业开发MVC开源框架SSH和SSM,小面由小编来说说它们的不同

框架比较方面问题:

1.SSH 和 SSM 的区别:

> ✪ SSH 指的是 : Struts2 (做前端控制器)+ spring (管理各层的组件) + Hibernate (负责持久化层)

> ✪ SSM 指的是: SpringMVC (做前端控制器) + Spring (管理各层的组件) + MyBatis (负责持久化层)

**实现原理图表结构:

ssm框架 和springboot_spring


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数据源来配置数据库驱动。