一般的なカテゴリマッパー呼び出しDAO層におけるspringbootプロジェクトnullポインタ例外

プロジェクト私は特別なレコードに関する同じ問題に遭遇しました

二つの方法があります

 

まず、

このクラスは、アノテーションを使用しています@Component

静的フィールドのこのタイプのクラスを追加します

初期化メソッド、Beanを注入するために貼ら@PostConstructラベルを作成します。

マッパーやサービスメソッド呼び出しインタフェースを作成します。

通常のクラスへの最後の直接呼び出し

@Componentは、コンポーネントが分類されていない場合、我々はマークするこのアノテーションを使用することができるコンポーネントを指します。

 方法を変更することが@PostConstructあなたはサーブレット・サーバをロードしたときに実行され、サーバが唯一INTI()メソッドのSercletと同様に、一度呼び出されます。@PostConstruct修正方法は、コンストラクタの後にinit()メソッドの前に実行されます。

個人的な理解が焦点マッパーは、init()メソッドのトランジットをロードするために失敗しました

@Component
 パブリック クラスTestUtil { 

    @Autowired 
    プライベートDoctorInformationMapper doctorInformationMapper。


    公共の 静的TestUtil testUtil。

    @PostConstruct 
    公共 ボイドのinit(){ 
        testUtil = この; 
        testUtil.doctorInformationMapper = この.doctorInformationMapper。
    } 

    // 调用
    パブリック 静的 INT getOpenId(){
         int型のカウント= testUtil.doctorInformationMapper.count( "12313" )。
        リターン数。
    } 
    
}

 

II。春のコンテナによってピックアップ

すべてのSpringコンテナBean名2.1ファーストプリントアウト

@Component
 パブリック クラス ApplicationContextBeanは実装ApplicationContextAware、InitializingBean { 

    公共 静的のApplicationContextのApplicationContextと、

    / ** 
     *获取のApplicationContext 
     * 
     * @param のApplicationContext 
     * @throws BeansException
      * / 
    @Override 
    公共 ボイド setApplicationContext(ApplicationContextのApplicationContextの)がスローBeansExceptionを{ 
        ApplicationContextBean.applicationContext = のApplicationContext。
    } 

    / **
     *打印IOC容器中所有的ビーン名称
     * 
     * @throws 例外
      * / 
    @Override 
    公共 ボイド afterPropertiesSet()がスロー例外{ 
        文字列[]名 = applicationContext.getBeanDefinitionNames()を。
        (文字列名:名){ 
            するSystem.out.println( ">>>>>>" + 名)。
        } 
       のSystem.out.println( "------ \ nBean总计:" + applicationContext.getBeanDefinitionCount())。
    } 

}

代わりにテストを呼び出すのでは、プロジェクトの開始は、バックグラウンドで印刷されます

 

2.2 Beanは、ツールを書き始めます

@Component
 パブリック クラス SpringUtilが実装ApplicationContextAware {
     プライベート 静的のApplicationContextのApplicationContext = ヌル

    パブリックSpringUtil(){ 
    } 

    公共 ボイド setApplicationContext(ApplicationContextのarg0に)は、スローBeansException {
         場合(ApplicationContextの== NULL ){ 
            のApplicationContext = arg0にします。
        } 

    } 

    パブリック 静的ApplicationContextのgetApplicationContext(){
         戻りのApplicationContextと、
    } 

    パブリック 静的 ボイドsetAppCtx(ApplicationContextのwebAppCtx){
         IF(webAppCtx =!ヌル){ 
            ApplicationContextの = webAppCtx; 
        } 
    } 

    / ** 
     *手動Beanに注入取得することができるオブジェクトのインスタンスの後のApplicationContextオブジェクトのインスタンスを取得する
     * / 
    パブリック 静的 <T> getBean T(クラス<T> clazz){
         戻りgetApplicationContext()getBean(clazz);. 
    } 

    パブリック 静的 <T> T getBean(文字列名は、クラス<T> clazz)がスローClassNotFoundExceptionが{
         リターンgetApplicationContext()getBean(名前、clazz)。
    } 

    パブリック 静的 最終オブジェクトgetBean(文字列のbeanName){
         戻りgetApplicationContext()getBean(のbeanName)。
    } 

    パブリック 静的 最終オブジェクトgetBean(文字列のbeanName、文字クラス名)をスローにClassNotFoundException { 
        クラスCLZ = Class.forNameの(クラス名)。
        返す。getApplicationContextを()getBean(のbeanName、clz.getClass()); 
    } 

    パブリック 静的 ブールcontainsBean(文字列名){
         返す(getApplicationContext)をcontainsBean(名前)。
    } 

    パブリック 静的 ブール isSingleton(文字列名)がスローNoSuchBeanDefinitionExceptionを{
         戻りgetApplicationContext()isSingleton(名前)。
    } 

    パブリック 静的 <?>クラスのgetType(文字列名)スローNoSuchBeanDefinitionExceptionは{
         返すgetApplicationContext()のgetType(名前)。
    } 

    パブリック 静的文字列[] getAliases(文字列名)がスローNoSuchBeanDefinitionException {
         返す(getApplicationContext)をgetAliases(名前)。
    } 
  
// 测试 パブリック 静的GetCharIdストリング(文字列ChatID){ ChatListAssociationMapper associationMapper =(ChatListAssociationMapper)SpringUtil.getBean(「chatListAssociationMapper」);ばね容器は、そうでなければ、それは失敗し、最高のコピーの名前、場合によっては一貫して、//このパラメータを存在さ リターンassociationMapper.chatIdを(ChatID); }
}

 

上記2つの方法が主な方法で起動することができないように注意し、ヌル・ポインタ例外が報告されます

おすすめ

転載: www.cnblogs.com/nongzihong/p/11350308.html