注意:这是针对常见问题的规范答案.
我有一个Spring @Serviceclass(MileageFeeCalculator),它有一个@Autowiredfield(rateService),但该字段是null我尝试使用它时.日志显示正在创建MileageFeeCalculatorbean和MileageRateServicebean,但NullPointerException每当我尝试mileageCharge在我的服务bean上调用该方法时,我都会得到.为什么Spring没有自动装配领域?
控制器类:
@Controller
public class MileageFeeController {
@RequestMapping("/mileage/{miles}")
@ResponseBody
public float mileageFee(@PathVariable int miles) {
MileageFeeCalculator calc = new MileageFeeCalculator();
return calc.mileageCharge(miles);
}
}
Run Code Online (Sandbox Code Playgroud)
服务类:
@Service
public class MileageFeeCalculator {
@Autowired
private MileageRateService rateService; // <--- should be autowired, is null
public float mileageCharge(final int miles) {
return (miles * rateService.ratePerMile()); // <--- throws NPE
}
}
Run Code Online (Sandbox Code Playgroud)
应该自动装配的服务bean,MileageFeeCalculator但它不是:
@Service …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spring Boot配置DynamoDb客户端,并将我的端点和配置信息放在我的resources/application.properties文件中.但是,Spring Boot似乎没有获得这些属性.它确实选择了我存储在同一文件中的"server.default"密钥,因此它肯定会识别文件本身.
这是我的application.properties文件和我正在尝试将属性加载到(DynamoDBClientMapper)的类:
amazon.dynamodb.endpoint=http://localhost:8000/
amazon.dynamodb.region=us-west-1
amazon.aws.accesskey=key
amazon.aws.secretkey=key2
server.port=8080
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试加载属性的相关类.我尝试了@PropertySource注释和新的属性文件,以及EnableAutoConfiguration,但都没有注册属性文件.
@PropertySource("database.properties")
public class DynamoClientMapper {
@Value("${amazon.dynamodb.endpoint}")
private String amazonDynamoDBEndpoint;
@Value("${amazon.aws.accesskey}")
private String amazonAWSAccessKey;
@Value("${amazon.aws.secretkey}")
private String amazonAWSSecretKey;
@Value("${amazon.aws.region}")
private String amazonAWSRegion;
Run Code Online (Sandbox Code Playgroud)
这是我的App.java:
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class App {
// private static final Logger logger = Logger.getLogger(App.class.toString());
public static void main(String[] args){
SpringApplication.run(App.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dynamoClientMapper' defined in file [C:\Users\ychen4\Desktop\DiningApplication\target\classes\main\java\com\dining\dao\DynamoClientMapper.class]: Instantiation of bean failed; …Run Code Online (Sandbox Code Playgroud) 我想使用application.properties文件中的值,以便在另一个类的方法中传递它.问题是值总是返回NULL.可能是什么问题呢?提前致谢.
application.properties
filesystem.directory=temp
Run Code Online (Sandbox Code Playgroud)
FileSystem.java
@Value("${filesystem.directory}")
private static String directory;
Run Code Online (Sandbox Code Playgroud) 我正在使用SpringBoot的@Value注释从默认的application.properties文件填充对象属性,但是在Filter覆盖中看到一些奇怪的行为。
我的调试器中有两个断点:
@Component
public class BasicFilter implements Filter {
@Value("${aad.client_id}")
private String clientId;
@Bean
public FilterRegistrationBean registerFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new BasicFilter()); // <-- 1.
registration.addUrlPatterns("/secure/*");
return registration;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) { // <- 2.
HttpServletRequest httpRequest = (HttpServletRequest) request;
...
Run Code Online (Sandbox Code Playgroud)
在1 .: this.client_id处设置为'foo'(来自application.properties A2 2 .: this.client_id为空
对不同/缺失值有任何解释吗?