一、Maven基础
Maven是用于构建和管理java相关项目的工具。在Maven中用于描述项目的构建和依赖关系的文件为pom.xml文件。
图1、maven概念模型
1、常用代码“dependency”添加依赖
<dependencies>
<dependency>
<groupId>"依赖项组织ID"</groupId><!--依赖项来自那个仓库-->
<artifactId>"依赖项ID"</artifactId><!--依赖的具体项,例如jar包-->
<optional>"true/false"</optional><!--这个依赖项是否在项目中可选-->
<version>"版本号"</version><!--所需依赖项的版本号-->
<dependencies>
2、使用maven的好处:
- 方便管理依赖:Maven提供了一种简单强大的方式管理项目的依赖关系。通过pom.xml文件中的“dependency”声明依赖项,Maven可以自动下载并管理这些依赖项。方便管理,追踪依赖。
- 构建一致性:简单来说,Maven为不同项目制定了一套标准的生命周期,可减少配置和管理的复杂性。同时,Maven提供了一些常用的插件,可以执行各种任务,如代码检查、单元测试、静态分析等,提高了项目的质量和可靠性。
- 项目结构标准化:Maven提供了一套标准的项目结构标准。比如将源码放在src/main/java,将测试代码放在src/test/java中,方便其他开发人员理解并参与项目。提高了代码的可读性和可维护性。
- 多模块管理:Maven将项目拆分为了多个模块(此处区别于MVC,Maven可以管理项目中每一个子模块的配置文件、依赖项等),提高了代码的复用性和可测试性。同时,Maven可以自动解决模块之间的依赖关系,简化了模块之间的集成和部署。
- 中央仓库和第三方仓库支持:Maven使用中央仓库来存储和共享构建。Maven中央仓库中包含大量开源库、框架和插件,可以方便地引入和使用这些资源。同时Maven支持第三方私有仓库,可以将内部开发的库和插件发布在私有仓库中,方便团队内部共享和使用。
二、spring框架基础
1、两个基础概念:IOC和依赖注入
IOC(Inversion of Control):将对象的创建和依赖关系的构建交给IOC容器来完成,开发人员只需关注业务逻辑的实现。
依赖注入(Dependency Injection,DI):IOC需要通过依赖注入来实现。依赖注入是指容器在创建对象时,自动将对象所依赖的其他对象注入到它的属性、构造函数或方法中。(简单来说就是把IOC容器构建好的对象的属性值注入对应的属性和函数)
常用依赖注入的方式:
Setter注入(基于JavaBean的Setter方法)
//class文件
package com.example
public class User{
private long id;
public long getId(){
return id;
}
public void setId(long id){
this.id=id;
}
}
//xml配置文件
<bean id="User" class="com.example.User">
<property name="id" value="123456"/>//加ref可以实现设置其他<bean>对象的id的value值
</bean>
字段注入(注解模式):
public class UserService {
@Autowired
private UserRepository userRepository;
}
public class UserRepository {
// ...
}
// 在配置文件中配置注解自动扫描
<context:annotation-config />
<context:component-scan base-package="com.example" />
Spring框架中常见的注解
@Autowired | 自动装配 |
@Component | 标记一个类为Spring组件 |
@Controller | 标记一个类为Spring MVC控制器 |
@Service | 标记一个类为服务组件 |
@Repository | 标记一个类为数据访问组件 |
@RequestMapping | 映射HTTP请求到控制器方法 |
@PathVariable | 用于将URL中的变量绑定到方法参数上 |
@RequestBody | 用于将HTTP请求体绑定到方法参数上 |
@Transactional | 声明式事务管理 |
@Value | 注入属性值 |
2、Spring AOP模式 (面向切面的编程模式)
AOP(Aspect Oriented Program)是 Spring 框架提供的一个重要特性,它通过在运行时动态地将代码切入到方法的指定位置,从而实现横切关注点的模块化。其中,我们将周边功能(比如性能统计,日志,事务管理等等)称为切面(Aspect),核心功能(比如登陆,增加数据,删除数据等等)称为切点(Join Point)。将核心功能和周边功能交织在一起就叫做AOP。
图2、AOP原理图
Spring AOP的相关术语:
-
切面(Aspect):切面是一个模块化的横切关注点,它包含了通知和切点。通常,一个应用程序会有多个切面。
-
通知(Advice):通知是在特定的切点上执行的额外代码。在 Spring AOP 中,常见的通知类型包括前置通知、后置通知、返回通知、异常通知和环绕通知。
-
切点(Join Point):切点是在应用程序中定义的特定的方法,它是通知被执行的位置。在 Spring AOP 中,切点可以通过表达式或正则表达式来定义。
-
连接点(Pointcut):连接点是在应用程序中所有可能的切点的集合。连接点可以通过切点表达式来定义,用于匹配切点。
-
引入(Introduction):引入是一种在不修改原始类的情况下,为类添加新方法或属性的方式。它可以让我们向已有的类中添加新功能。
-
织入(Weaving):织入是将切面应用到目标对象中的过程。它可以在编译时、类加载时或运行时进行。
-
目标对象(Target Object):目标对象是被切面通知的对象,它是应用程序中的真正业务逻辑的部分。
-
AOP代理(AOP Proxy):AOP代理是在目标对象和切面之间进行通信的对象。它可以是JDK动态代理或CGLIB动态代理。
-
织入器(Weaver):织入器是负责将切面织入到目标对象中的工具。在 Spring AOP 中,织入器可以是编译器、类加载器或运行时代理。
注解模式下的spring AOP(前四个用到的比较多):
@Aspect | 用于定义切面,即包含切点和增强方法的类。 |
@Component | 用于表示一个类是一个组件 |
@Around | 在切点方法执行之前和之后执行的增强方法 |
@Pointcut | 用于定义切点,即在何处应用增强方法的位置;可以通过表达式或方法名来定义切点 |
@Before | 在切点方法执行之前执行的增强方法 |
@After | 在切点方法执行之后执行的增强方法 |
@AfterReturning | 在切点方法正常返回之后执行的增强方法 |
@AfterThrowing | 在切点方法抛出异常之后执行的增强方法 |
三、MyBatis(JDBC的升级版)
MyBatis的存在就是为了简化对数据库的操作,不必向JDBC那样除了写SQL语句外还必须操作Connection, Statement, ResultSet等辅助类。
图3、MyBatis工作流
mybatis-config.xml(主配置文件,一般在src下创建)
其作用主要是提供连接数据库用的驱动,数据库名称,编码方式,账号密码
示例:
<?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>
<typeAliases>
<!--表示将 com.how2java.pojo 包下的所有类都注册为类型别名。这意味着,如果在 SQL 映射文件中需要使用 com.how2java.pojo 包下的类,可以直接使用类名,而不必使用完整的类路径。-->
<package name="com.how2java.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--连接数据库-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/how2java/pojo/Category.xml"/>
</mappers>
</configuration>
Category.xml(在com.how2java.pojo包下创建)
包含对数据库的操作,一般会用到的标签有<select>、<update>、<delete>、<insert>在标签内部可以写出对应的SQL语句
示例:
<?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">
<mapper namespace="com.how2java.pojo">
<select id="listCategory" resultType="Category">
select * from category_
</select>
</mapper>
四、Spring MVC
spring MVC本质上就是基于spring框架的MVC开发模式,同样由Model——View——Controller三层结构组成。Spring MVC 和普通 MVC 的主要区别在于它是基于 Spring 框架构建的。Spring MVC 提供了很多与 Spring 框架集成的功能,如依赖注入、面向切面编程等。此外,Spring MVC 还提供了许多有用的功能,如请求映射、数据绑定、视图解析等,这些功能可以帮助开发人员更轻松地构建 Web 应用程序。与传统的 MVC 框架相比,Spring MVC 更加灵活,易于扩展和维护。
Spring MVC和Spring AOP的区别
初学的时候,很容易因为两者类似的分层思想认为MVC模式是AOP的一种,但是MVC和AOP其实是两种不同的设计模式,只是用了相似的策略。
MVC模式是一种用于构建用户界面的软件设计模式:它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责展示数据和用户界面,控制器负责接收用户输入并协调模型和视图之间的交互。MVC模式的目标是将应用程序的逻辑和用户界面分离,使代码更易于理解、修改和维护。
AOP模式是一种用于解决横切关注点的软件设计模式:它通过将横切关注点(如日志记录、事务管理等)从核心业务逻辑中分离出来,以便更好地重用和维护。AOP模式通过定义切点和增强方法来实现横切关注点的插入,切点定义了在何处应用增强方法,而增强方法定义了在切点处执行的逻辑。AOP模式的目标是将横切关注点与核心业务逻辑分离,提高代码的可重用性和可维护性。
运行原理图:
图4、 spring MVC原理图
五、SpringBoot入门(SSM升级版)
SpringBoot可以看作一种简单的Maven项目,简化了SSM中很多的配置操作。
初学的时候可以把SpringBoot简单看作是“SSM+Maven”。
SpringBoot运行原理图:(目前配置信息一般在xml文件中,如果使用了JSP视图则还包括了application.properties)
SpringBoot运行的原理
-
自动配置:Spring Boot通过自动配置来简化应用程序的配置。它会根据应用程序的依赖关系自动配置应用程序,减少了手动配置的工作量。
-
内嵌式容器:Spring Boot内置了Tomcat、Jetty和Undertow等常用的Web容器,可以在不需要独立安装Web容器的情况下运行Web应用程序。
-
Starter依赖:Spring Boot提供了一系列的Starter依赖,可以方便地集成常用的框架和库。例如,如果需要使用Spring Data JPA,只需要添加spring-boot-starter-data-jpa依赖即可。
-
命令行界面:Spring Boot提供了一个命令行界面,可以方便地运行、测试和打包应用程序。
SpringBoot如何启动
-
构建和打包:首先需要使用Maven或Gradle等构建工具将应用程序打包成可执行的JAR或WAR文件。
-
加载配置:Spring Boot会自动加载application.properties或application.yml等配置文件,并根据配置文件中的内容对应用程序进行配置。
-
启动内嵌式容器:Spring Boot内置了Tomcat、Jetty和Undertow等常用的Web容器,可以在不需要独立安装Web容器的情况下运行Web应用程序。
-
扫描组件:Spring Boot会自动扫描应用程序中的组件,并将它们注册到Spring IoC容器中。
-
运行应用程序:最后,Spring Boot会启动应用程序,并根据配置文件中的内容来配置应用程序的行为。(在IDE中手动运行的是应用程序——java程序,不是视图;也不要以run on server 的形式运行应用程序)
六、SSM入门(Spring+SpringMVC+MyBatis)
运行原理图
SSM的优点:
-
高度集成:SSM三个框架都是Spring生态系统中的一部分,它们之间可以很好地协同工作,提供了完整的Java Web应用程序开发解决方案。
-
灵活性:SSM框架提供了很高的灵活性,开发人员可以根据自己的需求选择使用其中的一个或多个框架。
-
易于学习和使用:SSM框架都具有较低的学习曲线和易于使用的API,开发人员可以快速上手并进行开发。
-
提高开发效率:SSM框架提供了很多现成的解决方案和工具,可以帮助开发人员提高开发效率。