工厂模式动态获取serviceImpl,动态获取实现类实例
时间: 2023-08-12 22:33:35 浏览: 45
如果您使用的是 Spring 框架中的工厂模式,您可以通过以下代码动态获取 `serviceImpl` 的实例:
首先,定义一个 `serviceImpl` 的接口,例如:
```java
public interface ServiceImpl {
void doSomething();
}
```
然后,定义一个或多个 `serviceImpl` 的具体实现类,例如:
```java
@Service
public class ServiceImpl1 implements ServiceImpl {
@Override
public void doSomething() {
System.out.println("ServiceImpl1 is doing something.");
}
}
@Service
public class ServiceImpl2 implements ServiceImpl {
@Override
public void doSomething() {
System.out.println("ServiceImpl2 is doing something.");
}
}
```
其中,`@Service` 注解表示这是一个 Spring 管理的 Bean,可以被注入到其他类中。
接下来,定义一个工厂类 `ServiceFactory`,用于动态获取 `ServiceImpl` 的实例:
```java
@Component
public class ServiceFactory {
@Autowired
private ApplicationContext context;
public ServiceImpl getService(String serviceName) {
return context.getBean(serviceName, ServiceImpl.class);
}
}
```
其中,`@Autowired` 注解用于自动注入 Spring 应用程序上下文,`getService()` 方法根据传入的 `serviceName` 动态获取对应的 `ServiceImpl` 实例。
最后,在需要使用 `ServiceImpl` 的地方,注入 `ServiceFactory` 的实例,调用 `getService()` 方法获取 `ServiceImpl` 的实例:
```java
@Autowired
private ServiceFactory serviceFactory;
public void someMethod() {
ServiceImpl serviceImpl = serviceFactory.getService("serviceImpl1");
serviceImpl.doSomething();
}
```
这段代码会动态获取 `ServiceImpl1` 的实例,并调用其 `doSomething()` 方法。如果您需要获取 `ServiceImpl2` 的实例,只需要将参数改为 `"serviceImpl2"` 即可。