[ SSH框架 ] Spring框架学习之一
一、Spring概述
1.1 什么是Spring
Spring是一个开源框架, Spring是于2003年兴起的一个轻量级的Java开发框架,由 Rod Johnson在其著作 Expert One-On-OneJ2 EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的 Javabean来完成以前只可能由EJB完成的事情。然而, Spring的用途不仅限于服务器端的开发。从简单性、
可测试性和松耦合的角度而言,任何Java应用都可以从 Spring中受益。 Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说, Spring是一个分层的 Javase/ eefull-stack(一站式)轻量级开源框架。
EE开发分成三层结构:
● WEB层 Spring MVC。
● 业务层Bean管理:(IOC)。
● 持久层 Spring的JDBC模板ORM模板用于整合其他的持久层框架。
1.2 为什么学习Spring
● 方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring管理。
● AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
● 声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。
● 方便程序的测试
Spring对 Junit4支持,可以通过注解方便的测试 Spring程序。
● 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如: Struts、 Hibernate、Mybatis、 Quartz等)的直接支持。
● 降低 Javaee API的使用难度
Spring对 Javaee开发中非常难用的一些API ( JDBC、 JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。
1.3 Spring的版本
Spring 3.X 和Spring 4.X
二、Spring的入门案例(IOC)
2.1 IOC的底层实现原理
·
2.2 第一步:下载Spring开发包
链接:https://pan.baidu.com/s/12mpSPwCVJeCYNEZ2vwoShA 密码:adcx
2.3 第二步:创建web项目,引入Spring开发包
如图所示,第一个入门案例我们只做最基本的开发,所以只需要用到基础的一些jar包即可,其它jar包会在后续用到的时候,陆续导入。在解压的Spring开发包的libs目录下找到以下基础jar包并导入:
2.4 第三步:引入相关配置文件
在src目录下创建beans1.xml 文件,并导入约束。(注意:核心配置文件名称和位置不是固定的,建议放在src目录下,官方建议名称:applicationContext.xml )
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> </beans>
2.5 第四步:编写相关测试类
package com.Kevin.aop;
/**
* Spring入门案例
* @author Kevin
*
*/ public class Book { public void add(){
System.out.println("Bookadd-----");
} }
2.6 第五步:在beans1.xml文件中完成配置
<bean id="bookDao" class="com.Kevin.XMLanno.BookDao"></bean>
2.7 第六步:编写测试程序
package com.Kevin.aop; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestUsage { //Spring入门案例测试
@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("beans1.xml"); Book book=(Book) context.getBean("book");
book.add();
} }
2.8 IOC和DI
IOC:控制反转,将对象的创建权交给了 Spring
DI:Deper Injection 依赖注入,需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去。
三、Spring的相关配置
3.1 id属性和name属性标签的配置
id:给bean起个名字,在约束中采用ID的约束;唯一,必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号。(不能出现特殊字符)
示例:<bean id="userAction" />
name:给bean起个名字,没有采用ID约束,如果bean没有id的话,name可以当做id使用。(name可以使用特殊符号)
3.2 scope属性:Bean的作用范围
● singleton:默认值,单例的。
● prototype:多例的。
● request:Spring创建一个Bean对象,将对象放到request域中。
● session:Spring创建一个Bean对象,将对象放到request域中。
● globalSession:应用在Porlet环境。如果没有Porlet环境,那么相当于session。
3.3 Bean的生命周期
通过配置<bean>标签上的 init-method 作为Bean的初始化的时候执行的方法,配置 destroy-method作为Bean的销毁的时候的执行方法。
销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁。
四、Spring的Bean的管理XML的方式
4.1 Spring生成Bean的三种方式(了解)
【无参数的构造方法的方式】
<!-- 方式一:无参函数的构造方式创建-->
<bean id = "userDao" class="com.Kevin.dao.UserDao"></bean>
【静态工厂实例化的方式】
//提供一个工厂类
public class UserFactory{ public static User.getUser(){
return new User();
}
} <!-- 方式二:静态工厂实例化-->
<bean id = "bookDao" class = "com.Kevin.factory.UserFactory"></bean>
【实例工厂实例化的方式】
//提供User的实例工厂 public class UserFactory{ public void User getUser(){
return new User(); }
} <!-- 方式三:实例工厂实例化-->
<bean id = "userFactory" class = "com.Kevin.factory.UserFactory" ></bean>
<bean id = "userDao" factory-bean = "userFactory" factory-method="getUser" ></bean>
4.2 Spring的Bean属性的注入
【构造方法的方式注入属性】
<bean id="userAction" class="com.Kevin.action.UserAction">
<constructor-arg name="name" value="Kevin"></constructor-arg>
</bean>
【set方法的方式注入属性】
<!-- 配置action对象 -->
<bean id="userAction" class="com.Kevin.action.UserAction" scope="prototype">
<property name="name" value="Kevin"></property>
</bean>
4.3 Spring的属性注入:对象类型的注入
<bean id="userAction" class="com.Kevin.action.UserAction" scope="prototype">
<property name="name" value="Kevin"></property>
<property name="person" ref="Ryan"></property>
</bean>
4.4 名称空间p的输入性注入方式(Spring 2.X 版本后提供的方式)
第一步:引入p名称空间
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
第二步:使用p名称空间
<bean id="book" class="com.Kevin.action.Book" p:name="Algorithms" p:price="666"></bean>
4.5 注入复杂类型
<bean id="user" class="com.Kevin.entity.User">
<!-- 数组类型数据 -->
<property name="arrs">
<list>
<value>Kevin</value>
<value>James</value>
<value>Ryan</value>
</list>
</property> <!-- 注入list集合数据 -->
<property name="list">
<list>
<value>Alice</value>
<value>Brank</value>
<value>Cindy</value>
</list>
</property> <!-- 注入map集合 -->
<property name="map">
<map>
<entry key="user1" value="Mark"></entry>
<entry key="user2" value="John"></entry>
<entry key="user3" value="Martin"></entry>
</map>
</property> <!-- properties的注入 -->
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">admin</prop>
</props>
</property>
</bean>
4.6 Spring的分配置文件的开发
实际开发中往往会有多个人共同来完成一个项目,因此就会有多个人共同使用spring配置文件,此时如果多个人都修改同一个配置文件,会产生很多不便和不必要的麻。此时就需要编写多个分配置文件,最后导入在同一个配置文件中,使用标签如下:
<!-- 引入其他spring配置文件 -->
<import resource="classpath:user.xml"/>
五、spring整合web项目管理小结
1.加载spring核心配置文件:new对象,功能可以实现,效率很低。
2.实现思想:把加载配置文件和创建对象过程在服务器启动时完成。
3.实现原理:
● 产生ServletContet对象
● 配置监听器
监听器具体使用:在服务器启动的时候,为每个项目创建一个ServletContext对象,在ServletContext对象创建的时候,使用监听器可以具体到ServletContext对象在什么时候创建
使用监听监听到在创建ServletContext对象时,加载spring配置文件,把配置文件配置对象创建
将创建对象放到ServletContext域对象中(serAttribute方法)
获取对象时,到ServletContext域得到(getAttribute方法)
[ SSH框架 ] Spring框架学习之一的更多相关文章
- [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)
一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- [ SSH框架 ] Spring框架学习之三(AOP开发和注解的使用)
一.Spring 使用 AspectJ 进行 AOP 的开发:注解的方式 1.1 引入相关的jar包 1.2 引入spring的配置文件 <?xml version="1.0" ...
- Java框架spring Boot学习笔记(十):传递数据到html页面的例子
新建一个templates文件夹和index.html <!DOCTYPE html> <html> <head lang="en"> < ...
- Java框架spring Boot学习笔记(七):@Configuration,@bean注解
@Configuration作用在类上,相当于一个xml文件 @bean作用于方法上,相当于xml配置中的<bean>标签 一个例子: 新建一个Springboot工程 新建一个User类 ...
- Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
- Java框架spring Boot学习笔记(四):Spring Boot操作MySQL数据库
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
- Java框架spring Boot学习笔记(三):Controller的使用
Controller注解介绍 @Controller:处理http请求 @RestController: Spirng4之后新加的注解,其实是一个组合注解等同于@ResponseBody和@Contr ...
- Java框架spring Boot学习笔记(二):Hello Spring Boot、以及项目属性配置
新建一个新建一个SpringBootTest工程 新建一个HelloController.java文件 package com.example.demo; import org.springframe ...
随机推荐
- js实现八皇后,回溯法
八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...
- today-Extension widget 扩展开发
设置UI部分的展开和收起
- Tips_发送请求时添加一个随机数参数,让浏览器每次都重新发请求到服务器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 百度网盘免VIP全速下载!
不知道大家在用百度网盘下载文件时会不会遇到这样一个问题: 过分! 太过分了! 100M的宽带你就给我限速到20KB/s... 当然 解决办法有很多 1.充钱(这辈子都不可能的) ······ 百度上有 ...
- C++中几种输入输出cin、cin.getline()、getline()、sscanf()、sprintf()、gets()等
1.cin和cout cout是输出流对象的名字,cin是输入流对象的名字 ,“<<”是流插入运算符(也可称流插入操作符〉,作用是将需要输出的内容插入到输出流中,默认的输出设备是显示器. ...
- python Cookie Session 相关用法
Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...
- 剑指offer【书】之简历抒写
项目介绍1.剪短的项目背景简短的项目背景,比如项目的规模,开发的软件的功能.目标用户等2.完成的任务这个要写详细,要让面试官对自己的工作一目了然.在用词上要注意区分“参与”和“负责”:如果只就用“负责 ...
- 深入理解JVM垃圾收集机制,下次面试你准备好了吗
程序计数器.虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收.垃圾回收主要是针对 Java 堆和方法区进行. 判断一个对 ...
- [Swift]LeetCode289. 生命游戏 | Game of Life
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- [Swift]LeetCode704. 二分查找 | Binary Search
Given a sorted (in ascending order) integer array nums of nelements and a target value, write a func ...