William的SSM框架笔记
- Spring
- SpringMVC
- Mybatis
( 写在开头:本文主要依据黑马程序员SSM框架教程PPT资料编写)
Spring
Spring的基本概念
loC 反转控制
AOP 面向切面编程
Spring的快速入门
spring的基本开发步骤
1.导入Spring开发的基本包坐标
2.编写Dao接口和实现类
3.创建Spring核心配置文件
4.在Spring配置文件中配置UserDaoImpl
5.使用Spring的API获得Bean实例
快速入门步骤
1.导入坐标
2.创建Bean
3.创建applicationContext.xml
4.在配置文件中进行配置
5.创建ApplicationContext对象getBean
Spring配置文件
Bean标签的配置
用于配置对象交由Soring来创建默认的情况下他会调用类中的无参构造函数,如果没有无参构造则不能创建成功
Bean标签的基本属性
id :Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称
Bean标签的范围取值
scope:指对象的做哟ing范围,取值如下
scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象就就一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
scope的取值为prototype
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对对象在使用中,对象就就一直活着
对象销毁:当对象长时间不用时,杯Java的垃圾回收器回收了
Bean的生命周期配置
init-method:指定类中的初始化方法名称
destroy-method:指定类中的销毁方法
Bean实例化三种方式
-
无参构造方法实例化
-
工厂静态方法实例化
-
工厂实例方法实例化
例:工厂实例方法实例化
Bean的依赖注入
依赖注入的具体分析
依赖注入 (Denpendency Injection):它是Spring框架核心IOC的具体实现。
在编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况。IOC解耦知识降低他们的依赖的关系,但是并不会消除。例如:业务层任然会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用Spring之后,就让Spring来维护了。简单的说,就是坐等框架把持久层的对象储如业务层,而不用我们自己去获取。
依赖注入的方式
思考:怎样将UserDao植入到UserService内部呢?
-
构造方法
-
set方法
1.set方法的注入
普通的set方法注入
P命名空间的注入
P命名空间注入本质也是set方法注入,但比set方法的注入更加的方便,主要体现在配置文件中
修改注入方式
2.构造注入
Bean的依赖注入的数据类型
除了对象的引用可以注入,普通的数据类型,集合等都可以在容器中进行注入
注入数据发的三种数据类型
-
普通数据类型
-
引用数据类型
-
集合数据类型
引用其他配置文件(分模块开发)
实际的开发中,Spring的配置内容非常多,这就导致Spring配置之很繁杂且体积很大,所以,可以将部分配置拆解到其他的配置文件中,而在Spring主配置文件通过impor标签进行加载
Spring相关的API
ApplicationContext的继承体系
applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象
ApplicationContext的实现类
- ClassPathXmlApplicationContext
他是从类根路径下加载配置文件 (推荐使用)
- FileSystemXmlApplicationContext
他是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
- AnnotationConfigApplicationContext
使用注解配置容器对象时,需要使用此类来创建Spring容器。它用来读取注解。
getBean可以通过多种方式进行获取
app.getBean(“id”) 根据id获取 唯一的
app.getBean(class) 根据类型获取 不一定唯一
Spring配置数据源
数据源(连接池)的作用
数据源是为了提高程序性能出现的;实现实例化数据源,初始化部分连接资源;使用连接资源时从数据源中获取;使用我完毕后将连接资源归还给数据源
常见的数据源(连接池):DBCP,C3P0,BoneCP,Druid等
数据源的开发步骤
-
导入数据源的坐标和数据库驱动坐标
-
创建数据源对象
-
设置数据源的基本连接数据
-
使用数据源获取连接资源和归还连接资源
1. 手动创建c3p0数据源
2.手动创建Druid数据源
3.从配置文件中获取
由Spring配置数据源
可以将DataSource的创建权交由Spring容器去完成
- 配置Bean
- Spring容器产生数据源对象
注意: c3p0和druid的bean配置时 他们的需要注入的driver,url等的名字不同,主要取决于他们内部对应的set方法不同,需要注入的名字就是set后面对应的名字
由spring中加载properties配置文件
- 首先需要映入context命名空间和约束路径
命名空间复制xmlns,在xmlns后面加上:context,最后将bean全部改为context,最后即是
- 同理约束路径为
- 加载外部的properties文件
location即是文件的位置
使用EL表达式将properties中的数据传入bean
即 ${key}
- 最后同上
Spring注解开发
Spring的原始注解
spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
spring的原始注解主要是替代Bean的配置
注意:使用注解进行开发时,,需要applicationContext.xml中配置组件扫描,作用时指定哪个包及其子包下需要进行扫描以便识别使用注解配置的类,字段和方法
@Value注解
配合这个表达式使用
spring的新注解
具体实现
配置数据源
@Configuration
//说明这是一个核心配置文件
@ComponentScan("com.itheima")
//扫描组件对应着xml中的 <context:component-scan base-package="com.itheima">
@PropertySource("classpath:jdbc.properties");
//从properties文件中获取那些数据 对应着xml中的 <context:property-placeholder location="classpath:jdbc.properties"/>
public class SpringConfiguration {
//使用@Value注入值
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
public DataSource getDataSource() throws PropertyVetoException{
ComboPooledDataSource dataSource = new ComboPooledDataSource;
dataSource.setDriverclass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
}
Spring集成Junit
步骤
- 导入spring集成junit的jar包
- 使用@Runwith注解替换原来的运行期
- 使用@ContextConfiguration指定配置文件或配置类
- 使用@Autowired注入需要测试的对象
- 创建测试方法进行测试
Spring与Web环境的集成
- ApplicationContext应用上下文获取方式
应用上下文对象是通过new ClasspathXmlApplicationContext (spring配置文件)方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext (spring配置文件),这样的弊端是配置的时候文件加载多次,应用上下文对象创建多次。
在Web项目中可以使用ServletContextListener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域servletContext域中,这样就可以在任意位置从域中获得上下文对象ApplicationContext对象了。
spring提供获取应用上下文的工具
Spring提供了一个监听器ContextLoaderListener就是对方法的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获取应用上下文对象。
所以我们只需要只有两件事
- 在Web.XML中配置ContextLoaderListener监听器(导入spring-web坐标)
- 使用WebApplicationContextUtils获得上下文对象ApplicationContext
SpringMVC
SpringMVC的简介
概述
SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow中
开发步骤
- 导入SpringMVC的相关坐标
- 配置SpringMVC核心控制器DispathcerServlet
- 创建Controller类和视图页面
- 使用注解配置Controller类中业务方法得到映射地址
- 配置SpringMVC核心文件Spring-mvc.xml
- 客户端发起请求测试
- SpringMVC的执行流程
图示
文字
SpringMVC注解解析
@RequestMapping
作用:用于建立请求 URL 和处理请求方法之间的对应关系
位置:
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性:
value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
例如:
params = {“accountName”},表示请求参数必须有accountName
params = {“moeny!100”},表示请求参数中money不能是100
mvc命名空间引入
命名空间:xmlns:context=“http://www.springframework.org/schema/context”
xmlns:mvc=“http://www.springframework.org/schema/mvc”
约束地址:http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
组件扫描
SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器中,如果使用@Controller注解标注的话,就需要使用<context:component-scan base-package=“com.itheima.controller"/>进行组件扫描。
SpringMVC的XML配置解析
视图解析器
SpringMVC有默认组件配置,默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
我们可以通过属性注入的方式修改视图的的前后缀
<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix