Как работает java @Value? - PullRequest
0 голосов
/ 13 мая 2018

Я использовал 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;
    }

}

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

Но когда я так использую, переменная "baiduurl" не может быть решена:

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 неправильно ?????

В моем приложении.properties:

baiduurl=http://www.baidu.com
server.port=8888

1 Ответ

0 голосов
/ 13 мая 2018

Если вы прокомментировали свой контроллер как @RestController, тогда ваш класс станет @Controller

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

A @Controller, аннотированный класс будет @Component:

@Documented
@Component
public @interface Controller 

Во время сканирования компонента контейнер контейнера Spring инициализирует ваш класс, @Autowire поля и вводит @Value

Во втором примере ваш UrlService не является компонентом, поэтому привязка / внедрение не выполняется.

Вам следует пометить службу с помощью @Service (или другого маркера, например @Component ...), чтобы в контейнер для пружин впрыснули baiduurl значение для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...