您好我是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后实例化服务对象来实现相同的目的。
我有更好的方法吗?
我只需要一个方向,然后我会想出来。
谢谢
答案 0 :(得分:0)
好吧,我猜你要做的是有一个Before建议,它接受传入的服务名称,创建一个适当类的对象,然后在新创建的对象上调用适当的方法。看来,对我来说,你真的在寻找更多的工厂模式,但是试图用AOP来实现它。
如果你采用了Factory模式,你将创建一个名为ServiceFactory的类,它接受一些参数并返回这些参数的正确Service实现。调用代码只需使用Factory即可在运行时获得正确的服务。
另一种方法,如果你想坚持使用更多的DI模式,可能是创建一个作为“指挥”的包装类。这可能有一个服务名称映射到服务实现。然后,您可以将此包装器注入到代码中,甚至将Map注入包装器。您的调用代码将调用包装器上的方法,该方法将找到正确的单例实现并将调用进行聚合。
我觉得使用AOP就是在寻找麻烦。
答案 1 :(得分:0)
您可以使用spring @Autowire注释注入服务impl类。由于你有2个实现类,你可以使用限定符来指定需要注入的impl。