springboot中的继承和功能的开启

阅读更多

 

springboot中的继承

 

 一   1,配置类继承

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport ////////////类似自定义的复写配置-----一般是一整套的更换---覆盖框架默认的缓存

虽然是自动装配,但是有多套一样的功能是,智能不到选择哪一个:框架有默认的缓存,start加入了redis此时会自动装配redis,这样就有两套了,框架不会

智能到选择哪一个,所以要继承覆盖

 

重载继承类中的方法,set进去自定义的bean就复写框架了默认逻辑

 

 

2,普通bean的继承////////////////////类似自定义的复写配置-----一般是一个类的更换

   一般bean类不继承都是自己写的,所以都是自定义的

 

 

 

二    有些功能的开启1,在主类--自动装配的  @springbootallpication   start中有spring.factories

这个注解主要是扫描configuration类,所以可以排除一些由于jar

依赖自动引入的功能,如果不排除就会自动配置,例如数据源,权限框架的jar,此时可以用exclude

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

                    2,在主类 通过importsselector,或register 进来的 @Enable....   :@Enabletransaction,@mapperscan  只需打开但是不在spring.factories中,无需自己写定义配置

                    3,在配置类configuration   @Enable...   自己配置的功能   可以在当前配置类也可放在主类

    

       开启之后,仍可以写这个功能的配置类定义,进行默认配置的修改(或者在属性文件中修改属性)

 

@EnableCaching开启扫描注解,只要bean中有方法有缓存的注解就会扫描每一个bean有缓存注解@Cacheable,@CacheEvict等的时候就发起拦截,缓存

 

 

 

 

 

示例:

 

1、通过继承CachingConfigurerSupport,将Spring-Cache的缓存换为Redis 
2、使用适合项目的key生成策略cacheKeyGenerator

 

package com.example.demo.config;

 

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.CachingConfigurerSupport;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.cache.interceptor.KeyGenerator;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.cache.RedisCacheManager;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

 

import java.lang.reflect.Method;

 

@Configuration

@EnableCaching

public class RedisConfiguration extends CachingConfigurerSupport {

    @Bean

    public KeyGenerator cacheKeyGenerator() {

        return new KeyGenerator() {

            @Override

            public Object generate(Object target, Method method, Object... params) {

                StringBuilder sb = new StringBuilder();

                sb.append(target.getClass().getName());

                sb.append(method.getName());

                for (Object obj : params) {

                    sb.append(obj.toString());

                }

                return sb.toString();

            }

        };

 

    }

 

    @Bean

    public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {

        return new RedisCacheManager(redisTemplate);

    }

 

    @Bean

    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

        StringRedisTemplate template = new StringRedisTemplate(factory);

        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper om = new ObjectMapper();

        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(om);

        template.setValueSerializer(jackson2JsonRedisSerializer);

        template.afterPropertiesSet();

        return template;

    }

 

通过Jackson2JsonRedisSerializer对 需要缓存的对象进行序列化操作

 

 

 

 

 

 

 

 

你可能感兴趣的:(springboot)