2

以下を含むクラスを持つコアモジュールがあります。

@Autowired
private BaseDao dao;

BaseDao インターフェイスのいくつかの実装:

class JdbcBaseDaoImpl implements BaseDao {...}
class HibernateBaseDaoImpl implements BaseDao {...}

そして、コアモジュールからそのクラスを使用するモジュールはほとんどありません(mavenを使用)。JdbcBaseDaoImplしかし、最初のモジュールでは、コアモジュールのそのフィールドで実装を使用し、2 番目のモジュールでは実装を使用したいと考えていHibernateBaseDaoImplます。

どうやってするか?つまり、コアモジュールでクラスを使用する方法

@Autowired
@Qualifier("jdbcBaseDaoImpl")
private BaseDao dao;

最初のモジュールで

@Autowired
@Qualifier("hibernateBaseDaoImpl")
private BaseDao dao;

2番目のモジュールで?

4

1 に答える 1

4

注釈は@Qualifier("<name>"). 詳しくはこちらをご覧ください。

ところで、これに相当する Java EE は@Resource(name="<name>").

これらのモジュールが同じプロセス空間で実行される場合、コード パスに基づいてコア モジュールの同じ変数に異なる実装を条件付きで挿入することはできません。代わりに、BaseDao 参照を依存モジュールにプッシュし、それぞれに適切なものを挿入して、それを必要とするコア モジュールのメソッドへの参照として渡すことができます。

これらのモジュールが異なるプロセス空間で実行される場合は、プロセス固有のスプリング構成ファイルで、各モジュールに適切な実装を構成できます (これは、運用段階と単体テスト段階の実装を分離するために行います)。

于 2012-09-20T19:07:15.647 に答える