当前位置: 首页 > 知识库问答 >
问题:

引用服务类内部的配置类时出现BeanCreationException错误

慕容齐智
2023-03-14
    @Service
    public class ImageService {

        public static Logger logger = Logger.getLogger(ImageService.class.getName());

        @Autowired
        MyProperties prop;

        private final String FILE_UPLOAD_LOCATION = prop.getUploadFileLocation() +"uploads/images/";

        public void upload(String base64ImageFIle) throws IOException {
            logger.info(FILE_UPLOAD_LOCATION);
        }
    }

这是我的配置

    @Data
    @Configuration
    @ConfigurationProperties (prefix = "my")
    public class MyProperties {

        private String resourceLocation;

        private String resourceUrl;

        public String getUploadFileLocation() {
            return getResourceLocation().replace("file:///", "");
        }

        public String getBaseResourceUrl() {
            return getResourceUrl().replace("**", "");
        }
    }

这里是我可以成功使用MyProperties的地方

    @Configuration
    public class StaticResourceConfiguration implements WebMvcConfigurer {

        @Autowired
        MyProperties prop;

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler(prop.getResourceUrl())
                    .addResourceLocations(prop.getResourceLocation());
        }
    }

共有1个答案

唐兴贤
2023-03-14

问题是您试图使用自动连线字段来设置内联字段分配中的值。

这意味着

private final String FILE_UPLOAD_LOCATION = prop.getUploadFileLocation() +"uploads/images/";

prop自动连线之前执行,这意味着它将始终为空

@Service
public class ImageService {

    //Fine since you are using static method
    public static Logger logger = Logger.getLogger(ImageService.class.getName());

    //Not needed if you are only using it to set FILE_UPLOAD_LOCATION
    //Allows field to be final
    private final MyProperties prop;

    //Still final
    private final String FILE_UPLOAD_LOCATION;

    //No need for @Autowired since implicit on component constructors
    ImageService(MyProperties prop){

        //Again not needed if you aren't going to use anywhere else in the class
        this.prop = prop;

        FILE_UPLOAD_LOCATION = prop.getUploadFileLocation() +"uploads/images/";
    }

    public void upload(String base64ImageFIle) throws IOException {
        logger.info(FILE_UPLOAD_LOCATION);
    }
}
 类似资料:
  • Nutz.Dao 接口(Git@OSC镜像)可以针对任何 POJO 的进行操作。因为 是通用的 Dao 操作,所以多数接口函数都需要一个参数类说明 POJO 的类型,比如: Pet pet = dao.fetch(Pet.class,"XiaoBai"); 单独的调用一行接口,多传入一个参数到没什么,但是如果频繁的被使用,每次都要多写一个参数毕竟很是麻烦。为此我又提供一层非常简单的 针对 or

  • 问题内容: 我想使用 在请求之间保存一个ID ,但是执行请求时得到了结果。 我设计了一个简单的Flask应用程序原型来演示我的问题: 为什么执行请求时不能使用以下值存储cookie? 问题答案: 根据Flask会议文档: …这意味着用户可以查看你Cookie的内容,但不能修改它,除非他们知道用于签名的密钥。 为了使用会话,你必须设置一个秘密密钥。 设置密钥。并且你应该返回字符串,而不是int。

  • 代码完全正确,但不能在浏览器上显示所需的输出--浏览器警告一个内部服务器消息(500),终端显示以下错误: ~/tracks/$flask运行*服务于flask应用程序“application.py”(延迟加载)*环境:开发*调试模式:关闭*在https://3405db29-f322-4a37-845f-11d0e562946b-ide.cs50.xyz:8080/(按Ctrl+C退出)上运行*

  • 我已经构建了一个RESTendpoint,它使用Spring和Apache CXF2.5来使用和生成Application/JSON。 配置: 当我使用不受支持的内容类型(如application/xml)发送请求(使用REST客户端应用程序)时,我会得到一个内部服务器错误。我希望是405,因为endpoint不支持任何其他内容类型。为什么我会得到这个例外?

  • 我试图在Spring Boot中使用SOAP web服务。我可以使用Spring MVC应用程序(使用web.xml而不使用Spring boot),但是我在使用Spring boot xml free Setup进行配置时遇到了困难。 下面是我的示例服务的代码,我试图为其生成wsdl。 我的Spring Boot配置如下: 当我点击URL localhost:8080/services时,我得到

  • 我在访问paypal rest api时遇到以下错误: 数组 这个错误不是恒定的。有人能帮忙吗?