使用Spring AOP 3.1.0使用方法参数设置服务实例

时间:2013-02-22 12:14:34

标签: spring-mvc annotations aspectj spring-aop

您好我是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后实例化服务对象来实现相同的目的。

我有更好的方法吗?

我只需要一个方向,然后我会想出来。

谢谢

2 个答案:

答案 0 :(得分:0)

好吧,我猜你要做的是有一个Before建议,它接受传入的服务名称,创建一个适当类的对象,然后在新创建的对象上调用适当的方法。看来,对我来说,你真的在​​寻找更多的工厂模式,但是试图用AOP来实现它。

如果你采用了Factory模式,你将创建一个名为ServiceFactory的类,它接受一些参数并返回这些参数的正确Service实现。调用代码只需使用Factory即可在运行时获得正确的服务。

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

我觉得使用AOP就是在寻找麻烦。

答案 1 :(得分:0)

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