Spring是什么?
Spring 是一款主流的 Java EE 轻量级开源框架 ,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring 框架除了自己提供功能外,还提供整合其他技术和框架的能力。
Spring 的狭义和广义
广义的 Spring:Spring 技术栈
广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。
狭义的 Spring:Spring Framework
狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
Spring 有两个最核心模块: IoC 和 AOP。
IoC:Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。
AOP:Aspect Oriented Programming 的简写,译为“面向切面编程”。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。
Spring是如何创建对象的呢?原理是什么?
// dom4j解析beans.xml文件,从中获取class属性值,类的全类名
// 通过反射机制调用无参数构造方法创建对象
Class clazz = Class.forName("类的全类名");
//Object obj = clazz.newInstance();
Object object = clazz.getDeclaredConstructor().newInstance();
程序运行
引入依赖(坐标)
https://mvnrepository.com/ spring junit
创建java
Stundet类 sleep方法
创建配置文件
在resources目录创建一个 Spring 配置文件 beans.xml(配置文件名称可随意命名,如:springs.xm)
id:设置bean的唯一标识
class:设置bean所对应类型的全类名
<bean id=" " class=" "></bean>
创建测试类
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");//对应spring配置文件名称
Student student =(Student)ac.getBean(" ")//内容对应id值
student.sleep();
运行程序
Spring配置
数据源
1.导入druid连接池坐标 mysql数据库驱动坐标
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
2.在resources下创建jdbc.properties配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/fuzhuang?serverTimezone=UTC&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
3.在beans.xml文件里添加jdbc配置
<?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">
<!--加载jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--数据源对象-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
Spring整合junit
junit单元测试坐标
导入junit单元测试坐标
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
2.注解加载
@ExtendWith(SpringExtension.class)
//加载spring核心配置文件
@ContextConfiguration("classpath:beans.xml")
3.使用@Autowired注入需要测试的对象
@Autowired
对象 对象
Spring集成Junit步骤
①导入spring集成Junit的坐标
②使用@Runwith注解替换原来的运行期
③使用@ContextConfiguration指定配置文件或配置类
④使用@Autowired注入需要测试的对象
⑤创建测试方法进行测试
Spring整合MyBatis
1.添加依赖坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.0</version>
</dependency>
2.创建实体类
3.书写Mapper相当于接口
4.书写Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//ClothingStyleDao对应mapper
<mapper namespace="com.wanxi.dao.ClothingStyleDao">
//parameterType获取参数的类型 resultType返回参数的类型
<insert parameterType="" resultType="">
//增
</insert>
<delete>
//删
</delete>
<update>
//改
</update>
<select >
//查
</select>
</mapper>
5.书写jdbc.properties
6.书写beans.xml
<!--mybatis 配置-->
<!-- 配置SessionFactory的Bean-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源(连接池) jdbc 的connection需要使用-->
<property name="dataSource" ref="dataSource"/>
<!-- 指定MyBatis配置文件的位置 -->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定的是SqlSessionFactory对象的id-->
<property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
<!--指定包名,包名是dao接口所在的包名
MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行
一次getMapper()方法,得到每个接口的dao对象
创建好的dao对象放入到spring的容器中
dao默认对象的名称:是接口名字的首字母小写
-->
<property name="basePackage" value="com.wanxi.dao"/>
<!--多个包-->
<!--<property name="basePackage" value="com.md.dao,com.md.dao2"/>-->
</bean>
7.书写mybatis.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--settings:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--数据库字段名 _ 转换成小驼峰命名-->
<setting name = "mapUnderscoreToCamelCase" value = "true"/>
</settings>
<!--设置别名 可选-->
<typeAliases>
<!--package:把包下面的所有类名作为别名name:实体类所在的包名-->
<package name="com.wanxi.model"/>
</typeAliases>
<!-- sql映射文件的位置 -->
<mappers>
<!--name是包名,这个包中所有mapper.xml一次加载-->
<package name="com.wanxi.dao"/>
<!-- <mapper resource="com/zn/day4/IAccountMappert.xml"/>-->
</mappers>
</configuration>
8.书写测试类
Spring MVC
MVC 模式有助于将前端和后端代码拆分为独立的组件,这样更便于管理,而且能够更方便地改动其中的某一部分而不会互相影响。
1.导入mvc坐标
<!--spring mvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
2. web WEB-INF下创建spring-mvc.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置注解扫描-->
<context:component-scan base-package="com.wanxi.controller"/>
<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"></property>
</bean>
<!--默认底层就会集成jackson进行对象或集合的json格式字符串的转换-->
<mvc:annotation-driven />
<!--主要是处理web项目的静态文件问题。
每次请求过来,先经过 DefaultServletHttpRequestHandler 判断是否是静态文件,如果是静态文件,则进行处理,不是则放行交由 DispatcherServlet 控制器处理。-->
<mvc:default-servlet-handler/>
</beans>
3.web.xml 里配置SpringMVC核心控制器DispathcerServlet
<!--全局参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!--Spring的监听器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4.注解意思
@Controller
public class ClothingStyleController{
@RequestMapping("/back/clothingstyle/delete")
@ResponseBody
protected ResultModel clothingstyleDelete(HttpServletRequest req) {
return resultModel;
}
@RequestMapping:
作用:映射HTTP请求到某个具体方法。参数内容如下:
value:请求的URL;
method:HTTP请求方式,可选值有RequestMethod.GET,RequestMethod.POST等;
consumes:媒体类型,可选值有"application/json"等;
produces:相应的媒体类型,可选值有"application/json"等;
params:请求的参数;
headers:请求的HTTP头的值。
@ResponseBody
作用:标注某个被访问的方法返回类型前,该方法将会返回JSON类型而不是String或其它类型。需要注意的是,访问路径结尾必须是以.json结尾,否则可能报错。
@RequestBody
作用:将json格式的数据转为java对象。