记录了该学习中遇到源码中不错的工具类。之前可能自己都没有见到过的;这里介绍的只是用到过的功能,没有用的功能不会写出来
org.springframework.social.connect.web.SessionStrategy
session操作
功能:session大部分操作都包括
org.springframework.util.AntPathMatcher
路径匹配
功能:给定2个url,判定是否匹配,支持srping中带通配符的url
org.springframework.beans.factory.InitializingBean
在所有属性设置完成后,被调用一次该方法设置提供了多种不同的条件注解,可以查看该路径下的不同注解源码了解
使用场景: 使用方如果提供了自定义的实现则不使用这里的默认实现;只需要让spring容器中存在这里指定name的bean即可完成自定义覆盖默认配置的效果
路径:org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
@Bean
// spring 容器中如果存在imageCodeGenerate的bean就不会再初始化该bean了
// 条件注解,不指定name的话,应该是按类型来判定的
// 所以spring中貌似是不指定name的
@ConditionalOnMissingBean(name = "imageCodeGenerate")
public ValidateCodeGenerate imageCodeGenerate() {
ImageCodeGenerate imageCodeGenerate = new ImageCodeGenerate(securityProperties.getCode().getImage());
return imageCodeGenerate;
}
@ConditionalOnProperty
根据配置创建bean;
@Bean
@ConditionalOnProperty(prefix = "imooc.security.oauth2", name = "tokenStore", havingValue = "redis")
public TokenStore tokenStore() {
return new MyRedisTokenStore(redisConnectionFactory);
}
@Configuration
// matchIfMissing :当tokenStore没有值的时候是否生效
// 当tokenStore = jwt的时候或则tokenStore没有配置的时候使用下面的配置
@ConditionalOnProperty(prefix = "imooc.security.oauth2", name = "tokenStore", havingValue = "jwt", matchIfMissing = true)
public static class JwtTokenConfig {
@Bean
@ConditionalOnMissingBean(name = "smsValidateCodeGenerator")
// 注意方法名称:如果没有指定bean则按方法名称作为beanName返回
public ValidateCodeGenerator smsCodeGenerate() {
以上代码默认的BeanName是:smsCodeGenerate
org.springframework.beans.factory.config.BeanPostProcessor
@Component
public class SpringSocialConfigurerPostProcessor implements BeanPostProcessor {
// 任何bean初始化回调之前
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
//任何bean初始化回调之后
// 在这里把之前浏览器中配置的注册地址更改为app中的处理控制器
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
/**
* @see SpringSocialConfig#imoocSocialSecurityConfig()
*/
if (beanName.equals("imoocSocialSecurityConfig")) {
SpringSocialConfigurer config = (SpringSocialConfigurer) bean;
config.signupUrl("/social/signUp");
return bean;
}
return bean;
}
}
有时候你引入一些包,就会发现会增加多个restfull服务,这些服务注意查看控制台日志,就能找到对应的处理器
对于springboot默认提供处理错误的restfull服务如下
// org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController
// BasicErrorController 类提供的默认错误信息处理服务
在imooc.security.social.qq
前缀下,当appId属性存在的时候才让该配置生效
@Configuration
// 当配置了app-id的时候才启用
@ConditionalOnProperty(prefix = "imooc.security.social.qq", name = "app-id")
public class QQAutoConfig extends SocialConfigurerAdapter {
@FrameworkEndpoint
该注解只用于框架提供端点,语义和 Controller 注解一致,
如果使用Controller提供了和FrameworkEndpoint标识的相同路径,则框架提供的端点不会被路由到;
一般的场景用于:覆盖框架默认提供的端点;
@Order
注解比如以下场景,对于bean的注入顺序,可以按照order指定的来放入
@Component
public class DefaultAuthorizeConfigManager implements AuthorizeConfigManager {
// 由于需要有序的,所以不能再使用set了
// 依赖查找技巧
@Autowired
private List providers;
@Component
@Order(Integer.MIN_VALUE)
public class CommonAuthorizeConfigProvider implements AuthorizeConfigProvider {
@Component
@Order(Integer.MAX_VALUE)
public class DemoAuthorizeConfigProvider implements AuthorizeConfigProvider {