spring

spring mvc

页面 A ->(请求) 前端控制器 -> 映射器(相关配置) ->(Handler) 前端控制器 ->(Handler) 适配器 -> 具体的处理器 (Controller–A Controller–B)

service -> IOC -> .处理器 ->适配器 ->(ModelAndView) 前端控制器 -> 视图解析器 ->(View) 前端控制器 ->(页面请求) 页面

Spring注解

注解开发

为了简化配置(基于xml)
Spring支持使用注解代替xml配置

Spring常用注解

准备工作

如果需要使用注解开发 必须要开启组件component扫描
加了扫描才能使用注解(Spring会自动解析其中的注解)

@component //表示将对象交给容器管理
< bean id =“类名”,class=“类的位置”>< /bean>
实现类的组件定义

Spring MVC注解
1.web常用

@Controller:表明该类作为与前端交互的控制层组件,服务接口定义的提供访问应用程序的一种行为,解释用户的输出,将其转换成一个模型然后试图呈现给用户。

Spring MVC使用controller定义控制器,他还允许自动检测定义在类路径下的组件(配置文件中配置的扫描路径并自动注册)。

@RequestMapping
是什么:是一个处理请求地址映射的注解
作用:将url映射到 整个处理类或者特定请求的方法 可以只用通配符
params = “name” 只接受name参数
可以使用method属性标记器所接受的方法类型 如果不指定 可以使用 HTTP GET/POST方法请求数据方式请求数据 但是如果指定了方法类型,就只能使用该类型获取数据
?什么是方法类型 get post delete 等等 默认的get/post

{}表示url的变量部分

通配符 ?一个字符 *任意字符
** 多层路径

@RequestParam:
是:用来传递参数的一个注解
作用:是将将请求url上的参数绑定到方法参数上,从而限制参数是都需要传递 从reques请求中获取参数
value :name别名 绑定本次参数的名称
defaultvalue:本次请求没有携带这个参数或者参数为空,那么就会启动默认值
怎么用:有required参数 默认情况下 required = true 默认参数必须要传
当 required =false 可传可不传

public String say(@RequestParam(value = “name”,required =true/false) String name)

@PathVariable:
是用来接收请求路径中占位符的值

该注解用于方法修饰方法参数,会将修饰形参方法变量与url占位符中的变量动态绑定(用于动态绑定) 从url模板中获取参数

怎么用:占位符映射 令我们获得参数的值时会从url地址的大括号括起来的占位符变量内获取

参数可以是任意的简单类型(int long Date), 如不合适 Spring会将其转会为合适的类型并抛出TypeMismatchException异常。亦可以注册支持的合适类型
支持正则表达式
如:
@ResquestMapping(value = “/hello/{dayid}” Requestmethod.Get)
public String findPet(@PathVariable String dayid,Mode1 mode)
// 使用 该注解绑定 {dayid}

@RequestBody :

方法参数应该被绑定到Http请求的Body参数上 就是说让请求的参数应该被放在body里

@ResponseBody 将返回类型输入到HTTP response body中,在输出Json格式的数据时 会经常用到 一般默认为json

@RestController :用于创建rest类型的控制器与@Controller类
避免了重复写requestMapping和ResponseBody

@Component
是用来注解那些比较中立的类 的注解

作用:标注Sping管理的Bean ,表示将此类标记成Sping容器中的一个bean组件
实现bean组件定义

@Bean就是你可以从下面的方法中拿到一个bean

@Controller
被其标注的POJO类表示web层的实现
作用:对控制层的类进行注释
该类的作用是处理请求 接受url参数 返回响应

接收前端参数:
普通方式-请求参数名和Controller方法的参数一致
对象方式-请求参数名和Controller方法中的对象的参数一致
自定义方法参数名-当请求参数名与方法参数名不一致时
@requestparam

@Service(注入DAO)
是什么:被其标注的POJO类表示Service层实现
作用:对业务层的类进行注释 引用对应的DAO数据库操作(通过对DAO层基本的功能的操作实现业务逻辑)
怎么用:为了处理包含多个的类对象(多表操作)可注入多个dao对象

@Repository
是什么:是基于@component注解的扩展,被其标注的POJO类表示DAO层的实现

作用:对持久层(数据访问层)的类进行注释,也可以说用于标注数据访问组件 对数据库的操作
一般一个dao层对应一个Java类

@Autowired:自动根据类型注入
功能:为我们注入一个定义好的bean 完成自动装配的工作
参数required = true 对象不能为空 false 对象可以为空
@Qualifier 按指定的name装配

成员属性使用
set方法使用
构造方法是用

POJO类 普通的java文件 javabeans

DAO层:介于业务逻辑层和数据库之间 进行数据的访问和操作

Bean
是什么 是一个对象 Sping搭建的应用程序由一个又一个bean组成 由IOC容器(bean 容器)管理(IOC 定义对象依赖关系而不创建他们的过程)
依赖注入(DI)

mysql:
是什么:.MySQL是一个关系型数据库管理系统 sql语言(结构化查询语言)它采用表的形式来存储数据 你可以把它理解成是你的Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据,列代表该行中的每个值。列上的值是有数据类型的,比如:整数、字符串、日期等等。

事务(Transaction)是数据库系统中一系列操作的一个逻辑单元,所有操作要么全部成功要么全部失败。四大特性:
原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性。
隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的”独立“环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
持久性(Durable) :事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

干什么:关系数据库将数据保存在不同的表中
通过sql我们可以对我们的类对象进行操作

怎么用
数据定义语句:create、drop、turncate、alter
数据查询语句:select
数据操作语句:update、delete、insert
数据控制语句:grant、revoke

not null:非空,保证该字段不为空
default:默认值,保证该字段有默认值
primary key:主键,唯一且不为空
foreign key:外键
check:检查约束,检查输入的值是否为设定好的值或范围内的值
unique:唯一,可以为空

drop:drop table 表名
删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。
truncate (清空表中的数据):truncate table 表名
删除内容、释放空间但不删除定义(也就是保留表的数据结构)。与drop不同的是,只是清空表数据而已。
truncate不能删除行数据,虽然只删除数据,但是比delete彻底,它只删除表数据。
delete:delete from 表名 (where 列名 = 值)
与truncate类似,delete也只删除内容、释放空间但不删除定义;但是delete即可以对行数据进行删除,也可以对整表数据进行删除。
在这里插入图片描述

springboot不需要再像springmvc引入那么多的配置文件,只需要加入application.properties或者application.yml即可,比如在上一篇文章讲到数据库的配置,只需要在文件引入如下的配置即可:

jdbc访问数据库优缺点?
优点?直观好理解
缺点?创建很多对象 Connection Statement ResultSet
需要执行sql语句
要把resultSet转为 Student list集合
要关闭资源
sql语句和业务逻辑代码混在一起

jdbc 用jdbc操作数据库库 需要手动写代码注册驱动、获取connection、获取statement mybatis帮我们做了
也就是说mybatis会帮我们吧加载驱动 获取链接等过程封装
只需要我们关注业务逻辑本身的sql语句即可

mapper.xml是sql映射文件 在此处配置sql语句

使用maybatis-x.x.x。jar文件放在类路径 classpath中既可以用它了

jdbc(javaDateBaseConnectivity)是java与数据库之间的一个桥梁,是一个规范 而不是一个实现 由一组用java语言变异的类和接口组成 不同类型的数据库都有相应的实现。
能够执行sql语句

怎么用导入包 建立数据库与j’d’bc之间的链接

applicationcontext和beanfactory 是什么

BeanFactory 进行简单介绍
定义:

BeanFactory 是一个类的通用工厂,它可以创建并管理各种类的对象。这些可被创建和管理的对象实例,,Spring 把这些称为 Bean。

解释:

BeanFactory 接口位于类结构树的顶端,主要的方法就是 getBean(String beanName),该方法从容器中返回特定名称的 Bean,BeanFactory 的功能通过其他的接口得到不断扩展

查看接口

ListableBeanFactory:该接口定义了访问容器中 Bean 基本信息的若干方法,如查看Bean 的个数、获取某一类型 Bean 的配置名、查看容器中是否包括某一 Bean 等方法;
HierarchicalBeanFactory:父子级联 IoC 容器的接口,子容器可以通过接口方法访问父容器;
ConfigurableBeanFactory:是一个重要的接口,增强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容器初始化后置处理器等方法
AutowireCapableBeanFactory:定义了将容器中的 Bean 按某种规则(如按名字匹配、
按类型匹配等)进行自动装配的方法;
SingletonBeanRegistry:定义了允许在运行期间向容器注册单实例 Bean 的方法;
BeanDefinitionRegistry:Spring 配置文件中每一个节点元素在 Spring 容器里
都通过一个 BeanDefinition 对象表示,它描述了 Bean 的配置信息。而 BeanDefinition
Registry 接口提供了向容器手工注册 BeanDefinition 对象的方法。
举例:

在xml中配置一个Bean

通过 XmlBeanFactory 实现类启动 Spring IoC 容器的bean:

解释:

创建支持ant风格的资源加载的实现类,调用getResource加载资源,创建xmlBeanFactory生成器,生成资源获得BeanFactory接口,调用实例化getBean返回实例Car

XmlBeanFactory 是通过 Resource 装载 Spring 配置信息并启动 IoC 容器,然后就可以通过 BeanFactory方法getBean(beanName)方法从 IoC 容器中获取 Bean 了。通过 BeanFactory 启动IoC 容器时,并不会初始化配置文件中定义的 Bean,初始化动作发生在第一个调用时。对于单实例(singleton)的 Bean 来说,BeanFactory会缓存 Bean 实例,所以第二次使用 getBean()获取 Bean 时将直接从 IoC 容器的缓存中获取 Bean 实例。

ApplicationContext 简单介绍
定义:
ApplicationContext 由 BeanFactory 派生而来,对此提供了更多面向实际应用的功能。在BeanFactory 中,很多功能需要以编程的方式实现,而在 ApplicationContext 中则可以通过配置的方式实现

ApplicationContext 继承了 HierarchicalBeanFactory 和
ListableBeanFactory 接口,在此基础上,还通过多个其他的接口扩展了 BeanFactory 的功能,

这些接口包括:
ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动事件、关闭事件等。实现了 ApplicationListener 事件监听接口的 Bean 可以接收到容器事件,并对事件进行响应处理。在 ApplicationContext 抽象实现类
AbstractApplicationContext 中,我们可以发现存在一个 ApplicationEventMulticaster,
它负责保存所有监听器,以便在容器产生上下文事件时通知这些事件监听者。
MessageSource:为应用提供 i18n 国际化消息访问的功能;
ResourcePatternResolver :所有 ApplicationContext 实现类都实现了类似于
PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文件路径装载 Spring 的配置文件。
LifeCycle:该接口是 Spring 2.0 加入的,该接口提供了 start()和 stop()两个方法,主要用于控制异步处理过程。在具体使用时,该接口同时被 ApplicationContext 实现
及具体 Bean 实现,ApplicationContext 会将 start/stop 的信息传递给容器中所有实现了该接口的 Bean,以达到管理和控制 JMX、任务调度等目的
ConfigurableApplicationContext 扩展于 ApplicationContext,它新增加了两个主要的方法:refresh()和 close(),让 ApplicationContext 具有启动、刷新和关闭应用上下文的能力。

在应用上下文关闭的情况下调用 refresh()即可启动应用上下文,在已经启动的状态下,调用 refresh()则清除缓存并重新装载配置信息,而调用 close()则可关闭应用上下文。这些接口方法为容器的控制管理带来了便利,但作为开发者,我们并不需要过多关心这些方法;

和 BeanFactory 初始化相似,ApplicationContext 的初始化也很简单,如果配置文件放置在类路径下,用户可以优先使用 ClassPathXmlApplicationContext 实现类:

类路径名获取返回一个Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(“com/baobaotao/ context/beans.xml”);获取资源

AOP:

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑
的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高
了开发的效率。

应用场景

经常遇到:日志记录、异常处理、权限验证、缓存处理、事务处理、数据持久化、效率检查、内容分发

专业的概念定义:

Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
就是说由切点和通知组成,既包括横切逻辑定义也包括连接点的定义
Joint point(连接点/切点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
就是说程序执行的某个特定位置,如某个方法的调用亲厚等
Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
就是说每个类都有很多连接点 可以理解成连接点的集合
Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
通知/增强是织入到目标类连接点上的一段代码 ,就是增强到什么地方?增强什么内容?
Target(目标对象):织入 Advice 的目标对象.。
就是说织入类的目标类
**aop Proxy(代理对象)😗*即增强后产生的新对象
Weaving(织入):将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程
将增强添加到目标类的具体连接点的过程

实现方式 JDK 或者 CIGID

Advice(增强)

BeforeAdvice 前置通知(增强) 即在目标方法调用前执行 无论方法是否遇到异常都执行
AfterReturningAdvice:目标方法实施后增强 前提是没有遇到异常
AfterThrowingAdvice 异常通知(增强) 在目标方法抛出异常时执行 可以获取异常信息
AfterFinallyAdvice 最终通知(增强) 在目标方法执行后执行 无论是否异常
AroundAdvice 环绕通知 最强大的通知类型,可以控制目标方法执行(ProceedingJoinPoint.Proceed())可以在目标执行过程中执行

@Aspect驱动
1、定义一个切面类Aspect
在声明的类加上@Commponent和@Aspect 同时 SpringBoot还要引入spring-boot-stater-aop依赖包
2、定义切点Pointcut
定义切点 并定义切点在什么地方执行 采用@Pointcut(publiccom.xxx.xxx * . * (…))
规则:修饰符(可以不写 但是不能用
) + 返回类型 + 那些包下的类 +那些方法 +方法参数 *代表不限 …代表参数不限
3、定义Advice增强(通知)
@Before @After @AfterReturning @AfterThrowing @Around来完成某些切点增强动作 如 @Before(“MyPointcut()”)

pring AOP代理机制:

1、若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。

     优点:因为有接口,所以使系统更加松耦合
     缺点:为每一个目标类创建接口

2、若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

      优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。
      缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。
aop需要导入的架包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值