プロジェクト私は特別なレコードに関する同じ問題に遭遇しました
二つの方法があります
まず、
このクラスは、アノテーションを使用しています@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つの方法が主な方法で起動することができないように注意し、ヌル・ポインタ例外が報告されます