您的位置:澳门新葡8455最新网站 > 编程教学 > SpringBoot配置拦截器空指针异常

SpringBoot配置拦截器空指针异常

发布时间:2019-10-05 16:06编辑:编程教学浏览(125)

    拦截器中,@AutoWaired二个service,运营的时候发掘该service对象为空

      在百度上观察一篇很风趣的小说,是对AOP的一种解释,如下:(摘自:百度文库的 AOP和IOC最轻易明白的认证(Spring知识小计)):

    图片 1有毛病的.png

      

    对应的配置

    IOC,信赖倒置的意思, 
    所谓信任,从程序的角度看,正是举个例子A要调用B的方法,那么A就凭仗于B,反正A要用到B,则A重视于B。 
    所谓倒置,你必需领会尽管不倒置,会怎么样,因为A供给求有B,才足以调用B,假诺不倒置,意思正是A主动获取B的实例:B b = new B(),那就是最简易的得到B实例的法子(当然还可能有各类设计格局能够帮忙你去赢得B的实例,比方工厂、Locator等等),然后您就足以调用b对象了。 
    为此,不倒置,意味着A要勇往直前赢得B,才干应用B;到了这里,你就应该了解了倒置的野趣了。倒置就是A要调用B的话,A并没有必要主动获取B,而是由其余人活动将B送上门来。  
    印象的比喻正是:  
    平时状态下,借让你有一天在家里口渴了,要喝水,那么您可以到您小区的店堂去,告诉他们,你供给一瓶水,然后公司给您一瓶水!  
    那自然未有太大标题,关键是借使集团相当远,那么您必需驾驭:从你家怎么着到商家;小卖部里是或不是有您需求的水;你还要怀想是否开着车去;等等等等,也是有太多的题材要考虑了。也正是说,为了一瓶水,你还恐怕需求注重于车等等这么些通行工具或别的工具,难题是或不是变得复杂了?那么如何化解这些标题呢?  
    减轻那个难点的主意比比较粗略:小卖部提供送货上门服务,凡是小卖部的会员,你假若告诉集团你须求什么样,小卖部将再接再砺把商品给您送上门来!那样一来,你只需求做两件专门的学问,你就能够活得更其轻易自在: 第一:向合营社注册为会员 第二:告诉小卖部你需求哪些  
    是否和Spring的做法很类似呢?Spring正是信用合作社,你正是A对象,水就是B对象 第一:在Spring中宣称叁个类:A 第二:告诉Spring,A需求B  
    假设A是UserAction类,而B是UserService类 
    <bean id="userService" class="org.leadfar.service.UserService"/> 
    <bean id="documentService" class="org.leadfar.service.DocumentService"/> <bean id="orgService" class="org.leadfar.service.OrgService"/>  
    <bean id="userAction" class="org.leadfar.web.UserAction">      <property name="userService" ref="userService"/> </bean>  
    在Spring那些公司(工厂)中,有为数不少指标/服务:userService,documentService,orgService,也可能有许多会员:userAction等等,注解userAction要求userService就可以,Spring将由此你给它提供的大道主动把userService送上门来,由此UserAction的代码示例类似如下所示: 

    图片 2配置.png

     

    尝试过:

    var script = document.createElement('script'); script.src = ''; document.body.appendChild(script);

    在拦截器中贯彻 ApplicationContextAware,获取ApplicationContext,然后手动获取bean

     

    图片 38F8C9B8C-3B03-4936-96AB-74E362F8A6EE.png

     

    结果,对象依然为空

     

    品尝在类上可能措施上步向申明 @DependsOn(redisService)

     
    package org.leadfar.web; public class UserAction{ 
         private UserService userService;      public String login(){ 
              userService.valifyUser(xxx);      } 
         public void setUserService(UserService userService){            this.userService = userService;      } }  
    在这段代码里面,你没有必要自个儿创设UserService对象(Spring作为幕后无形的手,把UserService对象通过你定义的setUser瑟维斯()方法把它主动送给了你,那就叫信任注入!)  
    Spring正视注入的兑现技巧是:动态代理  
    --------------------------------------------------- 
    再说说AOP,即面向切面编制程序,面向切面编制程序的靶子正是分手关心点。什么是关切点呢,正是您要做的事,就是关心点。假诺你是个公子哥,没啥人生目的,每十二日正是衣来伸手,饭来张口,整日只驾驭玩一件事!那么,每一天你一睁眼,就光想着吃完饭就去玩(你不能够不要做的事),可是在玩此前,你还供给穿衣装、穿靴子、叠好被子、做饭等等等等事情,那个业务便是你的关切点,可是你只想吃饭然后玩,那么如何做吧?这么些职业通通交给别人去干。在你走到饭桌此前,有叁个特意的仆人A帮您穿服装,仆人B帮你穿靴子,仆人C帮你叠好被子,仆人C帮您做饭,然后您就从头吃饭、去玩(那正是你一天的正事),你干完你的正事之后,回来,然后一多级仆人又初始帮您干那一个干不行,然后一天就与世长辞了!  
    AOP的功利正是你只必要干你的正事,另外事情旁人帮你干。也是有一天,你想裸奔,不想穿衣裳,那么您把仆人A解雇正是了!也有一天,出门在此之前你还想带点钱,那么您再雇三个仆人D特地帮你干取钱的活!这正是AOP。各样人合二为一,灵活组合,到达一种可配备的、可插拔的程序结构。  
    从Spring的角度看,AOP最大的用处就在于提供了事务管理的技巧。事务管理正是一个关切点,你的正事正是去做客数据库,而你不想管业务(太烦),所以,Spring在您拜见数据库以前,自动帮您张开事务,当你拜会数据库停止今后,自动帮您付出/回滚事务!

    图片 4F9E2B227-A865-4FEC-9A4D-CAD723A6260F.png

    加载类上运行就报错

    图片 50AA7B0EB-BF76-4148-9F1F-13FCE0E8B3BF.png

    经过request获取ServletContext,然后再获得bean

    图片 6要么找不到bean.png

    最终,查阅博客找到二个建设方案

    图片 7DA5FA230-E2D0-47E6-8D34-0424C8419378.png

    最终

    图片 87F837293-4039-449E-B624-98D613185E0A.png

    本人对此本次难点的化解的敞亮是

    机动装配化解的:在这一个布局中,帮本身去new七个requestInterceptor的时候,检查需求依赖redis瑟维斯,然后它帮自身new了二个redis瑟维斯装配到requestInterceptor中去,手艺new出贰个requestInterceptor.自动注入相关文化参考Spring IOC和DI 的理解

    在此感谢博客,dzl84394的特辑

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:SpringBoot配置拦截器空指针异常

    关键词:

上一篇:劳动提供与调用

下一篇:没有了