项目由原来的MVC趋型 jsp+servlet+javabean演变成ssh(struts2+spring+hibernate或者springMVC+spring+hibernate),没有添加Spring的框架时,struts2的action或者SpringMVC的controller调用service和service调用dao层时,都是由程序员自己手动new出需要调用的对象,加入了spring框架后,由容器(根据配置文件或者注解)自动注入给调用者,在这个过程根据容器根据配置文件或者注解很容易轻易的换掉每层接口的实现类,而不用变动其它层,这个过程也就是我理解的IOC的含义,原理如下:
1.启动服务器之后spring容器根据读到的配置文件ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");初始化相应的bean对象
2.然后根据xml的配置或者注解做出相应的处理,这里以注解为例,bean.xml中添加有 <context:annotation-config/>(添加支持注解)和
<context:component-scan base-package="com.bjsxt"></context:component-scan> (自动扫包)配置,当扫到那个bean上有@Component("xxx")时,把这个bean对象放入容器中对应的key是xxx,扫到另外一个bean对象上有@Resource(name="xxx")时,这时容器再将key为xxx的那个对象给注入进来,这样就可以直接使用被容器注进来的bean对象了
在spring2.5.6以前的版本中@Component和@Service、@Repository、@Controller作用相同的,但是之后的版本像是有那么点区分,根据望文生义,显然@Service 是注解service层的,而@Repository是注释dao层的,@Controller是注释action层的(在SpringMVC中当然也是控制层controller层了),这样一来使我们的项目更加面向接口编程,这也符合了主流趋势
项目大了jsp页面多了,逻辑复杂了struts2、springMVC出现了,项目大了,sql语句多了,程序跟操作数据库多了hibernate出现了,项目大了,分层多了,需求变更多了,整个项目控制难了,Spring出现了