大家好,又见面了,我是你们的朋友全栈君。
REST方法
Spring 核心
IOC(Inversion of Controller)-面向对象的一个准则,对象的控制(创建和管理)由容器或者框架来实现,而不是开发者直接调用,开发者只需要实现接口或者放入自己的类就可以
依赖注入(Dependency Injection DI)每个方法都有一个独立的对象,通过接口去调用其他的对象,这些对象服务创建的时候才实现,是一种逆向的对象创建方式,Spring 中通过Constructor 或setter实现,实现了DI的库叫做容器
面向切面编程(Aspect oriented programing,AOP)一种编程范式,允许横跨应用功能的切面,用于表示同时用在多个函数上的功能。事务,日志,权限等
Spring自动装配
通过识别以定义的bean ,spring 的装配机制允许自动解析bean之间的依赖,提供以下四种方法:
Spring Bean :由spring容器创建的对象,叫做spring bean
Bean 提供五种作用域:
Spring Bean生命周期:
Spring提供四种方法控制生命周期:
初始化顺序为:4—1—3
Spring注解
1、@Configuration:表示该类将声明一个或多个@Bean方法,这些类由Spring 容器处理,再运行时生成bean定义和bean服务请求
2、@Bean:注解方法表示生成一个bean ,由容器管理,接受参数:name,initMethod和destoryMethod
3、@PreDestory和PostConstruct是bean的initMethod和destoryMethod的替代方法
4、@ComponentScan:和@Configuration一起使用,指定扫描Spring组件的目录
5、@Component:表示一个类是组件,它可以被配置了@configuration 和@ConponmentScan的类检测到
6、@PropertySource:提供一个声明式的机制为spring环境添加property source,和@Value 一起使用
7、@Service
8、@Repository
9、@Autowired:用于实现bean的自动注入。经常和Spring @Qualifier配合使⽤用,解决同类型注⼊入导致的冲突
SpringMVC注解:
@Controller
2. @RequestMapping
3. @PathVariable
4. @RequestParam
5. @ModelAttribute
6. @RequestBody and @ResponseBody
7. @RequestHeader and @ResponseHeader
Spring
事务管理理注释
@Transactional:注释⽤用于声明事务管理理,常⽤用在Spring MVC Hibernate
Spring Security注释
@EnableWebSecurity:和@Configuration配合使⽤用定义安全性配置,用在SpringSecurity模块
Spring Boot注释
@SpringBootApplication
@EnableAutoConfiguration
Spring IOC和DI
IOC 就是将对象的创建和管理交给spring 容器进行处理。
注解:
@Retention(RetentionPolicy.RUNTIME) //该注解在Java、class和运行时都起作用
@Target(ElementType.ANNOTATION_TYPE) //该注解只能用在注解上
Public @Target(){
ElementType[] value();
}
@Target
表示该注解可以用在什么地方,可能的ElementType参数有:
CONSTRUCTOR
:构造器的声明
FIELD
:域声明(包括enum
实例)
LOCAL_VARIABLE
:局部变量声明
METHOD
:方法声明
PACKAGE
:包声明
PARAMETER
:参数声明
TYPE
:类、接口(包括注解类型)或enum
声明
@Retention
表示需要在什么级别保存该注解信息。可选的RetentionType参数包括:
SOURCE:注解将被编译器抛弃
CLASS:注解将在class文件中可用,但会被JVM抛弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息:
@Document
将注解包含在Javadoc中
@Inherited
允许子类继承父类中的注解。
JPA
Jpa是现代化的数据持久化技术规范,是实现ORM的Java标准API,定义了供ORM提供商实现的接口
JPA=API+JPQL(Java Persistence Query Language)+ORM(Object/relation metadata)
Spring Data旨在提供统一的,易用的数据库访问技术
Spring data架构是高度模块化的,每个模块都有独立的贡献者
Spring Data JPA 适合用于快速创建基于JPA的用于CRUD操作的repository层,并且不用创建DAO
Spring Data JPA特性
Spring Data JPA
项⽬目依赖:
1.数据库驱动:postgresql,mysql
2.Spring框架核⼼心:spring-core, spring-context
3.Spring REST API:spring-webmvc, jackson-databind
4.Spring数据操作:spring-data-jpa, hibernate-entitymanage、
JPA VS Hibernate
Hibernate 是JPA规范的一个实现,设计JPA provider, 而spring Data JPA 是一个JPA数据访问抽象
Spring Data JPA提供GenericDao(通用DAO)的定制实现,通过⽅方法名约定⾃自动⽣生成JPA查询。Spring Data JPA通过扩展repositories(crudrepository, jparepository)实现DAO接⼝
Spring JDBC 是轻量级的,直接持久化的方式,目的在于实现原生的SQL查询
Spring Data 是Spring 框架的一个子项目,他的目的简化和不同类型数据库之间的操作,包括关系和非关系型,Spring Data JPA是一个支持JPA的子项目,但不能单独使用,需要和Hibernate等JPA 实现提供商结合使用。
SpringBoot
Spring Boot 是一个简化启动,开发和测试Spring应用的框架,SpringBoot将冗长的,常用的开发步骤,模板代码和配置封装为“默认配置”。
Spring Boot=Spring框架+内嵌Http服务器+XML/Annotation配置
Spring Boot 概念
选用理由
优点
Spring Boot 架构
四个核心组件和两个辅助组成
主要职责将一组通用的,相关依赖组合成一个依赖。一般情况下,Spring需要引入大量的依赖,而他们通常是固定的搭配,不方便构建文件管理。
优点:
1、减少手动定义大量的依赖。
2、简化构建依赖。
Spring经常在开发中需要配置复杂的配置。
AutoConfigurator 的职责就是减少或不需要spring配置,它负责注入配置信息
例如SpringMVC spring-boot-starter-web 会启动AutoConfigurator,自动生成XML/注释信息实现views,views resolvers等配置。
@SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiration
该组件是用于运行和测试SpringBoot 应用的命令行软件
利用CLI启动SBA(以服务为基础的建构),它内部使用SpringBoot Starter 和Spring Boot AutoConfigurator解释依赖病启动应用。
主要包含两个功能:
提供SBA的管理终端
提供SBA 度量
Spring声明式事务处理
Spring
声明:针对的是程序员,程序员告诉spring容器,那些方法需要事务,那些方法不需要事务处理,spring 容器来做事务处理,
目的:让Spring管理事务,开发者不在关注事务。
AOP
静态代理的缺点:
动态代理模式:
JDK代理。
Spring:cglib 动态代理
Jdk的动态代理:
cglib产生的代理类是目标类的子类
动态代理
JDK动态代理所用到的代理类在程序调用到代理类对象的时候才由JVM真正创建,JVM根据传递进来的业务实现类对象以及方法名,动态的创建了一个代理类的 class文件并被字节码引擎执行,然后根据该代理对象进行方法调用。
JDK动态代理的代理对象在创建时,需要使用业务实现类所实现的接口作为参数,如果业务实现类是没有是现实接口而是直接定义业务方法的话,就无法使用JDK动态代理了,并且,如果业务实现类中新增加了接口中没有的方法,这些方法是无法被代理的。
cglib 是针对类实现代理的,原理是对指定的业务类生成一个子类,并覆盖其中业务方法实现代理。因为采用的是继承,所以不能对final修饰的类进行代理。
静态代理是通过在代码中显式的定义一个业务实现类一个代理,在代理类中对同名的业务方法进行包装,用户通过代理类调用被包装过的业务方法。
JDK动态代理是通过接口中的方法名,在动态生成的代理类中调用业务实现类的同名方法。
Cglib动态代理是通过继承业务类,生成的代理类是业务类的子类,通过重写业务方法进行代理。
aop:
事务、日志、安全性框架、权限等都是切面
切面中的方法就是通知
在目标方法执行之前执行
无论目标方法是否抛出异常,都执行,因为在执行前置通知的时候,目标方法还没有执行,还没有遇到异常
在目标方法执行以后
当目标方法遇到通到异常的时候,后置通知将不执行
后置通知也可以接收目标方法的返回值
在目标方法执行之后执行
无论目标方法是否抛出异常,都执行,相当于finally
接收目标方法抛出的异常信息
如果不在环绕通知中调用ProceedingJoinPoint 的proceed 目标方法不会执行
环绕通知可以控制目标方法的执行
只有符合切入点,才能让通知和目标方法结合在一起
好处:事务、日志、安全性框架,权限、目标方法之间完全是松耦合的
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132788.html原文链接:https://javaforall.cn