From bbe05799820f6152aa713a32503752173e9df81e Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 22 Oct 2022 21:50:17 +0800 Subject: [PATCH] =?UTF-8?q?feat[storage]:=20Resource=E7=B1=BB=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=85=8D=E7=BD=AEwriteable=E5=B1=9E=E6=80=A7=EF=BC=8C?= =?UTF-8?q?=E8=BF=99=E6=A0=B7=E7=B1=BB=E7=9A=84=E5=B1=9E=E6=80=A7=E5=B0=B1?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=B8=BApublic=E5=92=8Cset=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/interpreter/ResourceReader.java | 25 +++++++++++-------- .../zfoo/storage/manager/IStorageManager.java | 2 ++ .../zfoo/storage/manager/StorageManager.java | 5 ++++ .../storage/model/config/StorageConfig.java | 11 ++++++++ .../schema/StorageDefinitionParser.java | 2 +- storage/src/main/resources/storage-1.0.xsd | 3 ++- 6 files changed, 35 insertions(+), 13 deletions(-) diff --git a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java index d8627393..bf14b609 100644 --- a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java +++ b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java @@ -17,6 +17,7 @@ import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.JsonUtils; import com.zfoo.protocol.util.ReflectionUtils; import com.zfoo.protocol.util.StringUtils; +import com.zfoo.storage.StorageContext; import com.zfoo.storage.model.anno.Id; import com.zfoo.storage.model.resource.ResourceData; import com.zfoo.storage.model.resource.ResourceEnum; @@ -123,18 +124,20 @@ public class ResourceReader implements IResourceReader { } } - if (Modifier.isPublic(field.getModifiers())) { - throw new RunException("因为静态资源类是不能被修改的,所以资源类[class:{}]的属性[filed:{}]不能被public修饰,请改为private修饰", clazz, field.getName()); - } + if (!StorageContext.getStorageManager().storageConfig().isWriteable()) { + if (Modifier.isPublic(field.getModifiers())) { + throw new RunException("因为静态资源类是不能被修改的,资源类[class:{}]的属性[filed:{}]不能被public修饰,用private修饰或者开启配置writeable属性", clazz, field.getName()); + } - var setMethodName = StringUtils.EMPTY; - try { - setMethodName = ReflectionUtils.fieldToSetMethod(clazz, field); - } catch (Exception e) { - // 没有setMethod是正确的 - } - if (StringUtils.isNotBlank(setMethodName)) { - throw new RunException("因为静态资源类是不能被修改的,所以资源类[class:{}]的属性[filed:{}]不能含有set方法[{}]", clazz, field.getName(), setMethodName); + var setMethodName = StringUtils.EMPTY; + try { + setMethodName = ReflectionUtils.fieldToSetMethod(clazz, field); + } catch (Exception e) { + // 没有setMethod是正确的 + } + if (StringUtils.isNotBlank(setMethodName)) { + throw new RunException("因为静态资源类是不能被修改的,资源类[class:{}]的属性[filed:{}]不能含有set方法[{}],删除set方法或者开启配置writeable属性", clazz, field.getName(), setMethodName); + } } } diff --git a/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java index 2dd72f61..042875ce 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/IStorageManager.java @@ -13,6 +13,7 @@ package com.zfoo.storage.manager; +import com.zfoo.storage.model.config.StorageConfig; import com.zfoo.storage.model.vo.Storage; import org.springframework.lang.Nullable; @@ -48,4 +49,5 @@ public interface IStorageManager { void updateStorage(Class clazz, Storage storage); + StorageConfig storageConfig(); } diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java index 82da8b65..efa9ab01 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java @@ -196,6 +196,11 @@ public class StorageManager implements IStorageManager { storageMap.put(clazz, storage); } + @Override + public StorageConfig storageConfig() { + return getStorageConfig(); + } + private Set scanResourceAnno(String scanLocation) { var resourcePatternResolver = new PathMatchingResourcePatternResolver(); var metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver); diff --git a/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java b/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java index d40fd63a..94e13141 100644 --- a/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java +++ b/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java @@ -25,6 +25,9 @@ public class StorageConfig { private String resourceLocation; + // 类的属性是否可写,如果为false则类的属性必须为private并且不能有set方法 + private boolean writeable; + public String getId() { return id; } @@ -48,4 +51,12 @@ public class StorageConfig { public void setResourceLocation(String resourceLocation) { this.resourceLocation = resourceLocation; } + + public boolean isWriteable() { + return writeable; + } + + public void setWriteable(boolean writeable) { + this.writeable = writeable; + } } diff --git a/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java b/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java index 87a53520..3767f342 100644 --- a/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java +++ b/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java @@ -68,10 +68,10 @@ public class StorageDefinitionParser implements BeanDefinitionParser { resolvePlaceholder("id", "id", builder, element, parserContext); resolvePlaceholder("package", "scanPackage", builder, scanElement, parserContext); + resolvePlaceholder("writeable", "writeable", builder, scanElement, parserContext); resolvePlaceholder("location", "resourceLocation", builder, resourceElement, parserContext); parserContext.getRegistry().registerBeanDefinition(clazz.getCanonicalName(), builder.getBeanDefinition()); - } private void registerBeanDefinition(ParserContext parserContext) { diff --git a/storage/src/main/resources/storage-1.0.xsd b/storage/src/main/resources/storage-1.0.xsd index f373f4cf..81690524 100644 --- a/storage/src/main/resources/storage-1.0.xsd +++ b/storage/src/main/resources/storage-1.0.xsd @@ -38,6 +38,7 @@ + @@ -59,4 +60,4 @@ - \ No newline at end of file +