【Spring】各种知识点,复习专用。

起步

使用 ==@Import({ApplicationConfig.class})==在配置类上导入其他配置类。

配置类:业务Bean和架构Bean分离。

Bean作用域

singleton:只使用1个实例
prototype:每次引用会创建新实例
session:持续时间与用户的HTTP会话一致-仅限Web环境
request:持续时间与用户的HTTP请求一致-仅限Web环境
application:持续时间和ServletContext一致
thread:持续时间与所在线程一致。未注册
web_socket:持续时间与websocket一致
refresh:
自定义作用域:定义一个工厂,注册一个定义作用域名称。

Bean覆盖:
springboot2.1开始默认禁用。

单例的实现

会创建一个配置类的子类——CGlib代理
单例的实例会被ApplicationContext缓存

public class AppConfig$$EnhancerByCGLIB$ extends AppConfig {
        public AccountRepository accountRepository() {
                // 如果bean已存在于ApplicationContext中,则返回bean 
                // 否则,调用 super.accountRepository(),在上下文中保存bean,返回bean
        }
        public TransferService transferService() { 
                // 如果bean已存在于ApplicationContext中,则返回bean 
                // 否则,调用 super.transferService(),在上下文中保存bean,返回bean
        }
}
减少空指针

在注入时引入Optional t;
利用t.ifPersent判断是否为空。

@PostContruct,@PreDestroy

@PostContruct在依赖注入后的后处理阶段被调用。
两个方法返回值都为void。
@PreDestroy在prototype类型下不会被调用。

@Autowired和@Resource

@Resource只支持属性和setter注入。先根据名称匹配。

@Autowired和@Inject

在这里插入图片描述

工厂Bean

Spring是一个工厂。
Configuration是一个工厂类,@Bean是工厂方法。

FactoryBean
配置类中,Spring自动调用getObject()方法。

指定依赖项的顺序

@DependsOn(“在这个bean创建后创建”)

AOP概念

AOP实现了横切关注的模块化,
作用:避免代码缠绕,消除代码分散。

SpringAOP使用JDK代理
激活AOP:@EnableAspactAutoProxy

1.Spring创建一个代理编织切面和目标。
2.代理实现目标接口
3.所有调用通过代理拦截器进行路由
4.执行匹配的Advice
5.执行目标方法

JoinPoint参数提供了拦截点的上下文

AOP通知

@Before
如果Advice抛出异常,则目标不会被调用
@AfterReturning
成功返回之后
@AfterThrowing
抛出指定的异常时,会调用Advice。无法终止异常的传播。
@After
无论是否抛出异常,都会执行。
@Around
继承自JoinPoint并增加了proceed()方法

事务控制

@Transactional声明式
声明式的事务控制——使用Around类型的advice

使用规则:
抛出runtime则回滚,检查异常不会回滚。
Transaction上下文绑定当前线程
可以配置在类,timeout属性控制超时失败。
propagation=Propagation.REQUIRES_NEW
使用rollbackFor或noRollbackFor重写默认规则。
readOnly=true——方法中不论查询几次,始终使用一个连接。——更快
isolation=Isolation.REPEATABLE_READ——隔离级别
value:事务管理器

程序化事务

public RewardConfirmation rewardAccountFor(Dining dining) { 
      ...
      return new TransactionTemplate(txManager).execute( (status) -> { 
            try {
                  ...
                  accountRepository.updateBeneficiaries(account);
                  confirmation = rewardRepository.confirmReward(contribution, dining);
            }
            catch (RewardException e) {
                  status.setRollbackOnly();
                  confirmation = new RewardFailure(); 
            }
            return confirmation; 
      }); 
}

SpringBoot

依赖管理

父级POM——依赖版本问题,maven插件构建项目,java版本。
Starters——引入16个协调依赖项。

打包

通过拓展Maven插件,以创建内置Tomcat的Fatjar

集成测试

提供 @SpringBootTest用于增强测试功能

集成日志

默认包括SLF4J、LogBack(SLF4J实现)
通过在application中指定文件和路径,记录到轮换文件。

自动配置

@EnableAutoConfiguration——启用自动配置

SpringApplication.run()——这是一个SpringBoot类

通过预写大量的Configuration类,以及==@Conditional==注解实现:
@ConditionalOnClass
@ConditionalOnProperty
@ConditionalOnMissingBean
@ConditionalOnMissingClass
@Profile

外部化属性

SpringBoot查找Application.properties提供给Environment。
根据{profile}管理查找profile属性。

在bean上使用 @ConfigurationProperties指定前缀。
启用的三种方式:
配置类上使用 @EnableConfigurationProperties激活。
配置类上使用 @ConfigurationPropertiesScan扫描。
加上@Component。

Environmrnt Bean

标识从运行时环境中加载的属性

  • JVM系统属性——自动填充
  • 系统环境变量——自动填充
  • Properties文件——classpath: file: http:
@Value 和 spel表达式

@Value可以使用在属性,和参数

  • “${daily.limit:1000}”
  • “#{environmrnt[‘daily.limit’]?:1000}”
    以上是等效的

EL属性可以是:

  • Bean,Environment属性(三类)
  • 允许创建自定义函数和引用:#{new Integer(environment[‘daily.limit’])*2}
@Profile

1
在配置类上使用:@Profile(“env”)
除非env被激活,否则配置中的任何内容都不可用。

2
在@Bean上使用@Profile注解。@Profile("!embedded")
2个Profile都使用相同的BeanID,同一时间只能有一个Profile被激活

3
@Profile能控制哪些@PropertySource是被包含在Environment中的

@Configuration
@Profile("local")
@PropertySource("local.properties")
public class DevConfig { ... }

SpringMVC

@ResponseStatus——请求状态。可以拿来标注异常类,和异常捕获方法。
@RestControllerAdvice——捕获控制层异常配置
@ExceptionHandler

@HiddenHttpMethodFilter:
HTML表单不支持PUT和DELETE
所以使用POST将他们放在一个隐藏的表单字段。

HEADOAS

超媒体即应用状态引擎

构建URL
  • UriComponentsBuilder
  • ServletUriComponentsBuilder

SpringSecurity

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值