私が作成したモジュール/ jarがあり、utillibraryとして使用しています。そこにサービスを作成しました:
@Service
public class PermissionsService { ... }
...これは、パッケージ内のcom.inin.architect.permissionsにあり、メインアプリケーションでは、このjarを参照/ロードしています(つまり、Maven POMで依存関係として設定しています)。アプリのxmlファイル)など:
<dependency>
<groupId>com.inin.architect</groupId>
<artifactId>permissions</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
そして、アプリケーション内で私はそのようなサービスを使用したい:
@Autowired
PermissionsService permissions
アプリケーションの春のセットアップで、私はこれを持っています:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.inin.generator", "com.inin.architect.permissions" })
public class WebConfig extends WebMvcConfigurerAdapter implements ServletContextAware { }
ただし、Tomcatでアプリケーションを実行すると、PermissionsService: "org.springframework.beans.factory.NoSuchBeanDefinitionException:タイプの修飾Beanがありません..."のBeanがないと文句を言います。
それで、どうすればライブラリからBeanをアプリケーションに持ち込めますか?確かに方法があります。これを機能させるには、ライブラリを本格的なMVCアプリケーションとして設定する必要がありますか?つまり、libにも@Configurationと@ComponentScanを設定する必要がありますか?
少なくとも、注入するクラスを含むパッケージをスキャンする必要があります。たとえば、Spring 4アノテーションの場合:
@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}
XML構成についても同じ原則です。
これについてのメモですが、依存関係をスプリングから切り離すことができます。あなたの@Configuration
クラス作成
@Bean public PermissionsService permissionsService(){
return new PermissionsService()
}
これにより、注入することもできます。スプリングアノテーションを削除する必要はありません。スプリング以外で潜在的に使用可能にするオプションです。
わかりました-私はまったく同じ問題を抱えていました-外部jarからmongo dbリポジトリインターフェイスを自動配線したかったです。
私はその瓶からすべてのBeanを自動配線することができます
@SpringBootApplication(scanBasePackages = {"com.myrootpackage"})
ただし、インターフェイスの自動配線は、「blablablaが見つかりませんでした...」で常に失敗しました
しかし、インターフェースは、インポートできるBeanと同じパッケージに含まれていました。 mongo dbインターフェイスの検索では、@ SpringBootApplicationのscanBasePackagesが考慮されていないことが判明しました!
明示的に設定する必要があります
@EnableMongoRepositories(basePackages = {"com.myrootpackage"})
または、メインクラスを「上」に移動して、デフォルトの検索がmongoインターフェイスでも機能するようにすることができます。だから私は問題を理解し、解決策を見つけました。しかし、同じルックアップパスを2回設定する必要があるため、まだ少し不満です。正直に言ってバカだ。
com.inin.architect.permissionsのapplication-context.xmlは、メインアプリケーション内で次の方法でインポートできます。
<import resource="classpath:/permissionApplicationContext.xml" />
これにより、定義したcom.inin.architect.permissionsからBeanを自動配線できます。