Java EE应用的分层
前端层(HTML5、CSS3 JS(ES6.1))、JQuery、Bootstrap、EasyUI、AngularJS、VUI、React
前端MVC层(struts 2、springMVC)web service|restful(CXF)
中间层(spring)
持久层(JDBC、Hibernate、Mybatis、JPA)索引层(lucene)Redis
数据库层(oracle、mysql)
全栈(Android、iOS开发)
为什么要用spring
第一个方法:new一个
A组件调用B组件的方法–这种关系是“依赖关系”
硬编码耦合
项目要升级B组件,A组件也要修改
第二种:通过工厂来获得一个,工厂模式
B b=BFactory.getB();
优点:A组件面向B的接口编程,将A组件与B组件的实现类进行分离
当B组件升级时,只要B组件依然实现B接口,那么A组件代码无需改变。
缺点:A组件需要与B工厂耦合,增加了复杂度(额外管理工厂类)
第三种:依赖注入(DI(dependency injection)控制反转IOC(inverse of control))
中间层为何要分成service和dao
中间层组件存在业务规则的不断的升级、改变;持久层技术也存在改变,因为采用桥接模式,所有中间层组件就被分离成service(负责业务规则的改变)、DAO(负责持久化技术的改变)
桥接模式的目的
当持久层技术改变的时候,只需要修改DAO组件,不需要修改service组件
当持久层技术发生改变,事务控制代码会发生改变,而事务控制代码是写在service层,必然造成service代码修改
解决方式:aop
桥接模式:
当某个组件存在2个或者2个以上变化时,应该考虑将该组件分离成2类或2类以上组件,每类组件专门负责一个维度的变化。最后需要该组件的时候,将2类或2个以上的组件进行组合。
下载和安装spring
1)解压下载得到的压缩包
—docs:包括API文档和参考手册
–libs:包括spring各种模块的class文件和API文档,源码的压缩包
–schema:包含spring各种配置文件的xml schema文档
2)添加spring JAR包
3)增加一个spring配置文件
4)创建spring容器(bean工厂、spring工厂、spring上下文),通过容器获取容器中的bean
spring容器
beanFactory的子类ApplicationContext
ApplicationContext的子类ClassPathXmlApplicationContext:从类路径下搜索配置文件
FileSystemXmlApplicationContext:从绝对路径或者相对路径下去搜索配置文件
spring框架的本质
通过xml配置去驱动spring 框架以反射执行Java代码
bean:驱动spring去执行构造器,执行有参数还是无参的构造器,取决于 的子元素
:驱动spring去执行setter方法
每个元素:每个该元素代表一个构造器参数