Spring为全家桶的核心
随着后端框架的一步一步推陈出新,慢慢那些简单固定的搬砖(重复性)工作都会被框架替代。
SpringBoot为例,甚至Tomcat都不需要配置了(当然Tomcat配置过程也很固定)
Spring的@注解回顾
spring注解的作用:
spring作用在类上的注解有@Component、@Responsity、@Service以及@Controller;而@Autowired(已过时)和@Resource是用来修饰字段、构造函数或者设置方法,并做注入的。
Spring中包含4个主要的组件添加注解:
- @Controller:控制器,推荐给controller层添加此注解
- @Service:业务逻辑,推荐给业务逻辑层添加此注解
- @Repository:仓库管理,推荐给数据访问层添加此注解
- @Component:给不属于以上基层的组件添加此注解
@Component 作用: 基本注解,标识了一个受Spring容器管理的组件 ,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(把普通pojo实例化到spring容器中,相当于配置文件中的)- 注意:我们虽然人为的给不同的层添加不同的注解,但是在spring看来,可以在任意层添加任意注解 2、当注解作用在类上时,表明这些类是交给spring容器进行管理的,而当使用@Autowired和@Resource时,表明我需要某个属性、方法或字段,但是并不需要我自己去new一个,只需要使用注解,spring容器会自动的将我需要的属性、方法或对象创造出来。这就是通常所说的依赖注入和控制反转。
搭上这一生命的列车,感受这生命的起点与终点
-
简单粗暴介绍:使用注解的类都是交给spring管理,需要spring实例化出bean对象,这样才能调用对应实例方法处理前端request请求。
-
注意:若想注解实例化某bean则其对应Class类或接口Impl实现类上必须加上@Resource注解,这样才能对应实现spring注解管理映射注入实例化bean。
-
注解的本质就是用来实例化bean
-
于是可以发现serviceImpl,controller,类定义的对象以及配置类的类名上面都是带@注解的,这些注解的作用就是实例化bean。
-
spring中的bean都是项目装配启动时要实例化的bean,这样才能使用bean调用实例化方法提供服务。
-
注意class中定义的对象变量也是需要实例化bean才可以在实例方法中使用。
-
-
任何框架都是先运行配置文件,该实例化实例化,该注入注入,该配置配置之后再通过前端触发进行使用,凡是所写类只有实例化才能使用对应的实例方法。
-
只有spring可以使用注解进行实例化bean,其余框架都需要基于spring(被spring整合)才能使用注解实例化bean,而使用注解的类都要在项目装配启动加载到内存时实例化然后提供服务。
-
java网站开发(请求-响应模型):url触发Controllerbean然后调用实例方法从而进行逻辑处理最后返回结果,而框架会根据设置的单例或者多例进行bean的管理。
(除去main函数,其余java实例方法都是被动触发执行)
例如:
@Controller,只有项目启动时提前实例化bean才能对前端传递的需求进行处理。
@Service,在serviceImpl层添加注解,service层为接口层无需添加注解,注入的时候会将实现service层的Impl层注入。
Spring Boot 是 Spring 的一套快速配置脚手架,本质上SpringBoot就是Spring
JavaWeb基础
Servlet\Filter\Listener三大组件
Servlet,Filter, Listener 是java web的三大组件,每个组件编写完成后都需要配置。
SpringMVC框架 : 是基于servlet实现的。
Struts2 框架: 是基于Filter实现的(Struts1基于servlet)。
servlet/filter/listener/interceptor区别与联系
Servlet、Filter、Listener深入理解
SpringBoot,SpringMVC和Spring的关系
- Spring Boot 是 Spring 的一套快速配置脚手架,本质上SpringBoot就是配置好的Spring。Spring Boot 使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置(例如:配置文件的名称和类型甚至位置都已经配置好了,程序员只需要按照规定好的流程开发就行了)。
- SpringBoot是配置好的Spring所以可以快速整合其余Spring可以整合的(SSM,SSH等)框架(导入依赖就行)因此就有了脚手架称号。
- SpringMVC就是管理controller对象的容器,Spring就是管理service和dao对象的容器,两者都存在于一个Spring开源框架。
SpringMVC基于Servlet
Spring Boot
正常情况Spring项目打包成war包并在外部的Tomcat中运行。
Spring Boot默认使用内嵌的Tomcat作为Web服务器,这意味着Web服务器已经被Maven打包到JAR文件中,因此你不需要将应用部署到外部服务器上,只需在JDK环境下运行JAR文件即可启动Web应用:
java -jar xxx.jar
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
可以理解为SpringBoot是配置好Spring.xml等配置文件的Spring架构,只需要注解就可以实现对应配置功能
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器(后端服务器);
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。
- 开箱即用Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
- 约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
SpringBoot应用系统开发模板的基本架构设计从前端到后台进行说明:前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它们都是用Java语言编写的,渲染模板并输出相应文本,使得界面的设计与应用的逻辑分离,同时前端开发还会使用到Bootstrap、AngularJS、JQuery等;在浏览器的数据传输格式上采用Json,非xml,同时提供RESTfulAPI;SpringMVC框架用于数据到达服务器后处理请求;到数据访问层主要有Hibernate、MyBatis(MyBatis-Plus)、JPA等持久层框架;数据库常用MySQL;开发工具推荐IntelliJIDEA。
Spring Security
Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
- 用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
- 用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
Spring Security其实就是用Filter,多请求的路径进行过滤
-
如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是否符合请求的要求。
-
如果是token,则是解析出token,然后将当前请求加入到Spring-security管理的权限信息中去
SpringCloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
注解类型
SpringBoot启动类配置@Scan扫描包注解后,对应basePackages = "XXX.xxx"包下的类或接口等就不需要再添加对应@注解了,例如:@MapperScan注解。
一种是和@Autowired@Resource(注入)搭配,例如:@Service(装配)
另一种是注解即需实例化,例如:@Controller
还有一种是注解起配置作用,例如:@MapperScan
@Autowired/@Resource无法注入,异常:NullPointerException: null
- @Autowired为自动装配,将对象自动注入到类中使用.
- @Autowired注意事项:Autowired注入对象时,需要确保对应的对象已经被实例化出来即对应对象的类已被@注解或者spring配置文件已经将其实例化。
- @Autowired注入有两个条件,被注入的类的对象交给了spring管理(注解或者spring配置文件);同时使用@Autowired的类的对象也要交给spring管理.两个条件都满足才能注入(注解或者spring配置文件).
- serviceImpl层还有controller层类名上都有spring@注解.
- spring中的bean都是项目装配启动时要实例化的bean,这样才能使用bean调用实例化方法提供服务。
注意:class中定义的对象变量也是需要实例化bean才可以在实例方法中使用。
@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类。
配置扫描的是java接口不是xml文件,而maven默认不扫描xml文件,需要单独配置maven扫描xml文件。
@MapperScan注解
例如:
1、@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
@Mapper
public interface UserDAO {
//代码
}
如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan
2、@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,
@SpringBootApplication
@MapperScan("com.winter.dao")
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类
3、使用@MapperScan注解多个包
(实际用的时候根据自己的包路径进行修改)
@SpringBootApplication
@MapperScan({"com.kfit.demo","com.kfit.user"})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}