コントローラークラスとして自動配線するために使用したいI
実装を備えたサービスインターフェイスがあります。を自動配線しないでください。どうすればこれを達成できますか。さらに、I 実装は注釈付きの @Service Bean です。それらをxml宣言に移動したくありません。I1,I2,I3...I10
I1-I5
List<I>
C
I6-I10
質問する
1069 次
3 に答える
1
mvb13 のコメントに基づいて、問題の解決策を編み出そうとしました....
そこで、ArrayList を拡張するクラスを作成し、それをコンポーネントとしてマークします。
@Component("mysublist")
public class MyList extends ArrayList implements ApplicationContextAware
{
@Value("comma.sep.eligible.beans.classnames")
private String eligibles;
private ApplicationContext appCtx;
@PostConstruct
public void init()
{
Map allBeans = appCtx.getBeansOfType(I.class);
for(Object bean:allBeans.values())
{
if(eligibles.contains(bean.getClass().getSimpleName()))
{
add(bean);
}
}
}
public void setApplicationContext(ApplicationContext appCtx)
{
this.appCtx = appCtx;
}
}
これで、必要なクラス定義で上記の Bean を次のように自動配線できます。
@Service
public class MyService
{
@Resource(name="mysublist")
private List<I> myReqdBeans;
......
}
*コード内のジェネリック関連の意味は無視してください。
于 2013-12-23T14:13:11.697 に答える
0
を使用する必要があります@Qualifier
。必要なサブセットを定義します。
@Autowired
@Qualifier("MySubset")
private List<I> list;
しかし、プロパティを使用するには、Bean 定義を xml に移動する必要があると思います<qualifier ... />
。修飾子を指定する別のオプションはないと思います。
于 2013-10-24T13:57:13.077 に答える