终极自定义接口实现!按需获取实现类&方法
- 1、开始想弄一个根据不同的需求获得不同的实现类
- 我依旧觉得不够过瘾,如果我的方法不够岂不是还要再加方法。于是我想到了它!。
- 我以为这样就完了~
- 思考
- 1 之前的哥们说,用SpringBeanUtil这个帮助类的话,既不解耦也不依赖注入!!!
- 2 如果我要传多个不同类型的参数呢?。总不能加很多个吧。很傻很天真;
1、开始想弄一个根据不同的需求获得不同的实现类
于是开始了寻找,终于在
这个哥哥的灵感下实现了他的思路
首先我们有一个接口!
public interface PortDataDealService {
String deal(String data);
}
然后我们搞几个他的实现类
这里我只搞了一个,不过没有关系,跟着我的步伐,你搞几个都没关系。
public class P86 implements PortDataDealService {
@Override
public String deal(String data) {
//TODO 这里插入你想实现的东西。
return null;
}
}
这时候就有了类和接口,接下来就是如何随心所欲的调你想要的接口了。
但是这时候我们需要一个帮助类-帮助我们获取实现类
public class SpringBeanUtil {
/**
根据名字获得 类实例
* @param BeanId
* @return
*/
public static Object getBeanByName(String BeanId) {
if (null == BeanId) {
return null;
}
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
assert wac != null;
return wac.getBean(BeanId);
}
/**
根据类型获得 类实例
* @param clazz
* @return
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public static Object getBeanByType(Class clazz) {
if (null == clazz) {
return null;
}
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
assert wac != null;
return wac.getBean(clazz);
}
}
接下来就要用到我们这个接口了;
//这里强制转换成你要的接口,那么可以调用这个接口的方法。而你
PortDataDealService beanByName = (PortDataDealService) SpringBeanUtil.getBeanByName("P"
//获取的是这个接口的实现类,这个type可以是类名。你可以根据你得到的参数设置实现类名
+ type);
//调用方法
beanByName.deal(string);
我依旧觉得不够过瘾,如果我的方法不够岂不是还要再加方法。于是我想到了它!。
接下来就来一个简简单单 的 重构,在我的接口加上 泛型。如下
/**
*
* @param <R> 返回值
* @param <P> 参数
*/
public interface PortDataDealService<R,P> {
R deal(P data);
}
这样的话,就可以瞎玩了,想要什么参数就要什么参数;
只要把我的实现类稍稍改一下
public class P86 implements PortDataDealService<Integer,String> {
@Override
public Integer deal(String ... data) {
//TODO 这里插入你想实现的东西。
return null;
}
而我们的调用。不需要做任何改变 还是这样
PortDataDealService beanByName = (PortDataDealService) SpringBeanUtil.getBeanByName("P"
+ type);
//调用方法
beanByName.deal(string);
我以为这样就完了~
我突然想到。如果我需要多参呢 我想到了它 ( … )
我现在去看看怎么用
看起来很简单,稍稍修改了一下 接口和实现类
看接口
/**
*
* @param <R>
* @param <P>
*/
public interface PortDataDealService<R,P> {
R deal(P ... data);
}
看实现类
public class P86 implements PortDataDealService<Integer,String> {
@Override
public Integer deal(String ... data) {
//TODO 这里插入你想实现的东西。
return null;
}
我的调用依旧没有变过~~~~
思考
1 之前的哥们说,用SpringBeanUtil这个帮助类的话,既不解耦也不依赖注入!!!
2 如果我要传多个不同类型的参数呢?。总不能加很多个吧。很傻很天真;