1

我有一个工厂类,它应该返回一个classAor的实例classB。这些类实现接口XYZ

   interface xyz;
   getInstance()

   @service 
   classA implements xyz{
      public void checkStatus(){
      }
   }

   @service  classB implements xyz{
      public void checkStatus(){
      }
   }

工厂类:

   @component
   class ABCFactory{
       @Autowire classA A;
       public static getInstance(str a){
           return classA;
       }
   }

客户端代码:

   Class A a = ABCFactory.getInstance("A");
   a.checkStatus();

我得到空指针异常——可能a返回为空?

使用 spring 注释和自动装配 bean 实现工厂模式的最佳方法是什么?

4

2 回答 2

0

很难确定为什么在没有看到 Spring 配置的情况下不会进行自动装配。我的第一个猜测是您没有打开组件扫描:

<context:component-scan base-package="org.example"/>

将类似的内容添加到您的 spring 配置文件(使用正确的包)将告诉 Spring 扫描包结构以查找需要自动连接的字段以及可用于自动连接的服务。

于 2012-07-08T22:20:28.820 回答
0

static是万恶之源。你是怎么进入classA这里的?

@Component
class ABCFactory{
   @Autowire classA A;
   public static getInstance(str a){
       return classA;
   }
}

A字段不是静态的,而getInstance()方法是 - 你的代码不会编译。

此外,依赖注入适用于实例,而不是static类。因此,您应该摆脱static

@Component
class ABCFactory {
   @Autowire classA A;
   public xyz getInstance(str a){
       return A;
   }
}

ABCFactory并在您需要的地方注入(例如在其他服务或控制器中):

@Autowired
private ABCFactory factory;

顺便说一句,您的设计在 Spring 环境中看起来很可疑,您想实现什么?

于 2012-07-09T15:49:32.627 回答