ssm框架是目前比较主流的JavaEE企业级框架
即Spring springMVC Mybatis的缩写,
-
Spring通过依赖注入(DI)来管理各层组件,使用AOP(面向方面编程)管理事务,日志权限等
-
SpringMVC 代表Model(模型) View(视图) Control(控制),接收外部请求,进行分发和管理
-
Mybatis基于JDBC的框架,用来操作数据库,并将业务实体和数据表联系起来
Tomcat 是免费的开源web容器(web容器是处理客户端请求)
Spring的基本应用
Spring
-
轻量级集成框架,java web开发框架
-
核心是一个完整的基于控制反转(IoC)的轻量级容器,以IoC和AOP(Aspect Oriented Programming,面向方面编程)为内核
-
Spring认为一切类都是资源,而资源都是类的实例对象(Bean),容纳和管理这些Bean的是Spring所提供的IoC容器,即Spring是一种基于Bean的编程
Spring的优点
-
非侵入式:指Spring框架的API不会在业务逻辑上出现
-
容器:管理对象的生命周期,以及对象与对象之间的依赖关系,通常用xml文件来实现
-
IoC:控制反转,即依赖关系的转移
“依赖关系亦称“逻辑关系”。在项目管理中,指表示两个活动(前导活动和后续活动)中一个活动的变更将会影响到另一个活动的关系。
-
依赖注入:对象间依赖关系的实现
-
AOP:面向方面编程,即把服务剥离出来形成一个方面,可以复用,然后将"方面"动态的插入到业务逻辑中
Spring的体系结构
Core Container 核心容器
-
Beans模块:提供BeanFactory
-
Core核心模块:提供Spring框架的基本组成部分,包括IoC和DI
-
Context上下文模块:访问定义配置的任何对象的媒介,ApplicationContext是Context的核心接口
-
Spring EL:运行时查询和操作对象图强大的表达式语言,SpEL是一种强大,简洁的装配Bean的方式,他可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中,更可以调用JDK中提供的静态常量,获取外部Properties文件中的的配置
Data Access/Integration 数据访问/集成层
JDBC模块:JDBC的抽象层,减少开发中对数据库操作的代码
ORM模块:Object Relational Mapping 对象关系映射
OXM模块:Object XML Mapping,提供一个支持对象/XML映射的抽象层实现
JMS模块:Java消息传递服务
Translation模块:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理
Web
Web模块:提供基础的针对Web开发的集成特性,如文件上传等
Servlet模块:也称作Spring-webmvc模块,包含Spring的模型-视图-控制器(MVC)
WebSocket模块:主要是两个进程间的通信这一块
AOP:提供面向方面编程的支持
Aspect:提供与AspectJ的集成功能,Aspect是一个功能强大且成熟的面向方面编程的框架
Intrumentation框架:类工具的支持和类加载器的实现
Messaging:消息传递体系结构和协议的支持
Test模块:提供对单元测试和集成测试的支持
Spring的核心机制:IOC和DI
IoC另外一个称呼是依赖注入(DI),是两个角度描述的同一个概念
依赖注入的类型
- 构造方法注入
构造方法可以是有参的和无参的
`
public AdminInfo(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd;
}`
applicationContext.xml文件配置如下
`
<bean id="adminInfo" class="com.ssm.entity.AdminInfo">
<constructor-arg name="name" value="admin"></constructor-arg>
<constructor-arg name="pwd" value="123456"></constructor-arg>
</bean>`
- Setter方法注入
注意:使用setter方法注入时Spring通过JavaBean的无参构造方法实例化对象,当编写带参构造方法后,Java虚拟机不会再提供默认的无参构造方法,需自行添加一个无参构造方法
``
public void setId(int id) { //setI + alt+/
this.id = id;
}
//手动添加无参构造方法
public AdminInfo() {
}``
p命名空间
添加p命名空间的声明再xml文件中
xmlns:p="http://www.springframework.org/schema/p"
`
<!-- 属性setter方法注入,p命名空间-->
<bean id="admin" class="com.ssm.entity.AdminInfo" p:id="8" p:name="zzzz" p:pwd="sdfs" />`
为AdminInfo类中的name和pwd添加setter方法
`
public void setName(String name) {
this.name = name;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}`
示例
DAO(Data Access Object)表示数据访问层
Service 表示业务逻辑层
元素中当使用ref属性,表示对Spring容器中的某个Bean实例的引用
xml文件:
<!-- 创建UserDAoImpl的实例 -->
<bean id="userDAO" class="com.ssm.dao.impl.UserDAOImpl"></bean>
<!-- 创建UserService的实例 -->
<bean id="userService" class="com.ssm.service.impl.UserServiceImpl">
<!-- 属性setter方法依赖注入数据访问层的组件 -->
<property name="userDAO" ref="userDAO"></property>
</bean>