Spring 4中的 @ControllerAdvice和@PropertySource
@ControllerAdvice
@ ControllerAdvice是一个@ Component,用于定义@ ExceptionHandler的,@InitBinder和@ModelAttribute方法,适用于所有使用@ RequestMapping方法。 Spring4之前,@ ControllerAdvice在同一调度的Servlet中协助所有控制器。Spring4已经改变:@ ControllerAdvice支持配置控制器的子集,而默认的行为仍然可以利用。
在Spring4中, @ControllerAdvice 通过annotations(), basePackageClasses(), basePackages() 方法定制用于选择控制器子集:
@ControllerAdvice(annotations = RestController.class)
class ApiExceptionHandlerAdvice {
/**
* Handle exceptions thrown by handlers.
*/
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ApiError exception(Exception exception, WebRequest request) {
return new ApiError(Throwables.getRootCause(exception).getMessage());
}
}
@PropertySource
Spring 4 是和@Configuration协同,提供一个增加name/value属性的配置方式。
@Configuration
@PropertySource("classpath:/datasource.properties")
public class DefaultDataSourceConfig implements DataSourceConfig {
@Autowired
private Environment env;
@Override
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty("dataSource.driverClassName"));
dataSource.setUrl(env.getRequiredProperty("dataSource.url"));
dataSource.setUsername(env.getRequiredProperty("dataSource.username"));
dataSource.setPassword(env.getRequiredProperty("dataSource.password"));
return dataSource;
}
}
.