Spring专题

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;
    }
}

 

.