Spring bean实现了两个接口

时间:2017-03-24 22:05:52

标签: java spring spring-mvc

我是Springs的新手,所以如果我的问题很愚蠢,请不要介意。

我有一个实现两个接口的类

public class AAA implements BBB, CCC {

}

public interface BBB {
  void method BBB_method();
}


public interface CCC {
  void CCC_method();
}

我在Context类中定义bean对象如下:

public class Context {

   @Bean
   public BBB myObject(){
       return new AAA();
   }

   @Bean
   public CCC myObject(){    //Issue is here
        return new AAA();    //Duplicate API name not allowed
   }
}

我已经在两个不同的类中自动装配了bean,如下所示:

@Autowired
private BBB myObject;

@Autowired
private CCC myObject;

自动装配这个并在Context类中定义bean的最佳方法是什么?并且在Context.java中定义2个bean对象有意义吗?如何解决这种情况,我希望我的bean可以自动连接到两个不同的接口(和对象名相同......在我的情况下是myObject)?非常感谢您的回复。谢谢!

2 个答案:

答案 0 :(得分:0)

您遗漏的一点是,您不需要与参考变量名称相同的方法名称,即您不需要将您的方法名称设为 class GetAddressAsyncTask extends AsyncTask<Void, void, void> { double lat = mLastLocation.getLatitude(); double lng = mLastLocation.getLongitude(); @Override protected Void doInBackground(Void... params) { // Do some background work Geocoder geoCoder = new Geocoder(MainActivity.this, Locale.getDefault()); StringBuilder builder = new StringBuilder(); try { List<Address> address = geoCoder.getFromLocation(lat, lng, 1); int maxLines = address.get(0).getMaxAddressLineIndex(); for (int i=0; i<maxLines; i++) { String addressStr = address.get(0).getAddressLine(i); builder.append(addressStr); builder.append(" "); } } catch (IOException e) { // Handle IOException } catch (NullPointerException e) { // Handle NullPointerException } return null; } @Override protected void onPostExecute(String result) { String finalAddress = builder.toString(); //This is the complete address. addressField.setText(finalAddress); //This will display the final address. } }

Spring容器只是试图找到依赖项的实现类,如果找到它们,它们将被注入myObject字段(引用变量名称并不重要,只是它们的类型,即类名很重要。)

Autowired课程中,您无法使用相同的签名定义两个方法,因此请将其更改为如下所示的名称:

Context

答案 1 :(得分:0)

Spring按名称解析bean,因为在运行时它无法从bean声明中获取方法返回类型。

这是解决问题的最佳方法 - 只需指定不同的bean声明方法名称(例如bbbObject和cccObject)

当自动装配时,如果存在歧义且弹簧无法在默认情况下解析它,请使用Qualified注释指定bean名称。