1 BeanPostProcessor
在bean的初始化前后可增加一些处理逻辑,实现这个接口需要实现两个方法;分别用在bean初始化前和后执行;
场景:对配置文件中加密的数据库密码进行解密
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Before Initialization: " + beanName);
return bean; // 可以对bean进行修改
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("After Initialization: " + beanName);
return bean; // 可以对bean进行修改
}
}
2 @ConditionalOnProperty
配置文件中有feature.enabled,且值为true时,才会加载此MyRedisConfig
设置多个,就代表多重判断 ;
@Configuration
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
//@ConditionalOnProperty(name = "feature.enabled2", havingValue = "true")
public class MyRedisConfig {
/**
* 避免存储的key乱码,hash结构依旧会乱码
* @param factory
* @return
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
// 自定义的string序列化器和fastjson序列化器
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setValueSerializer(redisSerializer);
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// hash 序列化, todo 否则塞进去的值只有java客户端能拿到,去命令界面无法get到
redisTemplate.setHashKeySerializer(redisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}