0

嗨,我是 Annotation 和 Spring AOP 的新手。以下是我想要实现的目标

public interface Service {
    public void process(String ServiceName, Bean bean);
}

public class ServiceImpl1 implements Service{
    public void process(String ServiceName, Bean bean) {

        /// do something here    
    }
}

public class ServiceImpl2 implements Service{
    public void process(String ServiceName, Bean bean) {

        /// do something here
    }
}

从其他班级我会打电话给类似的东西

...

public void doSomething(String serviceName, Bean bean){

    service.process("ServiceImpl1", bean); 

}
...

我可以通过使用 AroundAdvice 和 Before 建议并拦截我的 doSomething 方法来实现相同的目的,然后在读取 serviceName 后实例化服务对象。

我有更好的方法吗?

我只需要一个方向,然后我会弄清楚。

谢谢

4

2 回答 2

0

好吧,我猜你想要做的是有一个 Before 通知,它接受传入的服务名称,创建一个适当类的对象,然后在该新创建的对象上调用适当的方法。在我看来,您确实在寻找更多的工厂模式,但试图使用 AOP 来完成它。

如果您采用工厂模式,您将创建一个名为 ServiceFactory 的类,该类接受一些参数并为这些参数返回正确的服务实现。您调用代码只需使用工厂在运行时获取正确的服务。

另一种方法,如果你想坚持更多的 DI 模式,可能是创建一个用作“导体”的包装类。这可能具有服务名称到服务实现的映射。然后,您可以将此包装器注入到您的代码中,甚至可以将 Map 注入到包装器中。您的调用代码将调用包装器上的方法,这将找到正确的单例实现并聚合对它的调用。

我只是觉得为此使用AOP是自找麻烦。

于 2013-02-22T13:52:42.953 回答
0

您可以使用 spring @Autowire 注释注入服务 impl 类。由于您有 2 个实现类,您可以使用限定符来指定需要注入的 impl。

于 2013-02-22T14:53:43.400 回答