java @Value如何工作?

问题描述 投票:0回答:1

我像这样使用java @Value,它工作正常,可以正确解析变量“baiduurl”:

package com.lanyyyy.springdemo.controllers;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.lanyyyy.springdemo.service.*;
@RestController
public class GetURL {
    @Value("${baiduurl}")
    public String baiduurl;

    @RequestMapping(path="/getbaidu", method=RequestMethod.GET)
    public String getBaiduurl(){
//        return "hello";
        return baiduurl;
    }

}

======================

但是当我这样使用时,变量“baidu url”无法解决:

package com.lanyyyy.springdemo.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;

@PropertySource("classpath:application.properties")
public class UrlService {
    @Value("${baiduurl}")
    public String baiduurl;

    //    @RequestMapping(path="/getbaidu", method=RequestMethod.GET)
    public String getBaiduurl() {
        return baiduurl;
    }
}

有什么不对的吗?????或者我使用@Value错误?????

在我的applicaiton.properties中:

baiduurl=http://www.baidu.com
server.port=8888
java spring-mvc spring-boot annotations
1个回答
3
投票

当您将控制器注释为@RestController时,您的班级将成为@Controller

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController

@Controller注释类是@Component

@Documented
@Component
public @interface Controller 

在组件扫描期间,spring容器将初始化您的类,@Autowire字段并注入@Value

在你的第二个例子中,你的UrlService不是bean,所以没有绑定/注入。

你应该用@Service(或其他标记,如@Component ......)标记你的服务,让弹簧容器为你注入baiduurl值。

© www.soinside.com 2019 - 2024. All rights reserved.