blade-starter-redis 发布订阅支持延迟加载

This commit is contained in:
卢春梦 2025-01-21 14:19:23 +08:00
parent 1eae535fd5
commit 63393602c5
3 changed files with 60 additions and 1 deletions

View File

@ -0,0 +1,54 @@
/**
* Copyright (c) 2018-2099, DreamLu 卢春梦 (qq596392912@gmail.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springblade.core.redis.config;
import org.springblade.core.redis.pubsub.RPubSubListener;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.LazyInitializationExcludeFilter;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* mqtt 客户端订阅延迟加载排除
*
* @author L.cm
*/
public class RPubSubListenerLazyFilter implements LazyInitializationExcludeFilter {
@Override
public boolean isExcluded(String beanName, BeanDefinition beanDefinition, Class<?> beanType) {
// 类上有注解的情况
RPubSubListener subscribe = AnnotationUtils.findAnnotation(beanType, RPubSubListener.class);
if (subscribe != null) {
return true;
}
// 方法上的注解
List<Method> methodList = new ArrayList<>();
ReflectionUtils.doWithMethods(beanType, method -> {
RPubSubListener clientSubscribe = AnnotationUtils.findAnnotation(method, RPubSubListener.class);
if (clientSubscribe != null) {
methodList.add(method);
}
}, ReflectionUtils.USER_DECLARED_METHODS);
return !methodList.isEmpty();
}
}

View File

@ -39,7 +39,7 @@ public class RedisAutoCacheManager extends RedisCacheManager {
public RedisAutoCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration,
Map<String, RedisCacheConfiguration> initialCacheConfigurations, boolean allowInFlightCacheCreation) {
super(cacheWriter, defaultCacheConfiguration, initialCacheConfigurations, allowInFlightCacheCreation);
super(cacheWriter, defaultCacheConfiguration, allowInFlightCacheCreation, initialCacheConfigurations);
}
@NonNull

View File

@ -58,4 +58,9 @@ public class RedisPubSubConfiguration {
return new RPubSubListenerDetector(redisMessageListenerContainer, redisSerializer);
}
@Bean
public RPubSubListenerLazyFilter rPubSubListenerLazyFilter() {
return new RPubSubListenerLazyFilter();
}
}