SpringBoot 注冊攔截器方式及攔截器如何獲取spring bean實例


SpringBoot 注冊攔截器時,如果用New對象的方式的話,如下:

private void addTokenForMallInterceptor(InterceptorRegistry registry) {
InterceptorRegistration tokenInterceptor = registry.addInterceptor(new TokenInterceptor());
tokenInterceptor.addPathPatterns("/1");//默認需要一個攔截路徑,防止路徑校驗為空時造成全部攔截
filterByIniProperties(tokenInterceptor, "token-mapping");
commonExclude(tokenInterceptor);
}
此種方式是通過new對象的方式使用bean的。
那如果遇到需要第三方Bean實例注入時,應該怎么辦呢?

解決方案有兩種:
1、組件實例化,通過@Autowired 或@Resource等注解注入獲取
2、在已有的注解類型下,通過spring提供的WebApplicationContext的工具類獲取
public class TokenInterceptor extends HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(TokenInterceptor.class);
private BaseCacheService baseCacheService;

public Boolean queryOrderAndDelete(HttpServletRequest request,Long platformId, String orderToken) {
if (baseCacheService == null) {
BeanFactory factory = WebApplicationContextUtils
.getRequiredWebApplicationContext(request.getServletContext());
baseCacheService = (BaseCacheService) factory.getBean("baseCacheServiceImpl");
// "baseCacheServiceImpl"是默認的spring上下文中bean注入時的名字,若bean注入時沒有指定注入名字,默認是類名且首字母小寫
}
  ......
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM