1. ServiceLocatorFactoryBean的使用
ServiceLocatorFactoryBean类似于ApplicationContent,都可以进行获取bean的id进行获取bean实例
具体代码实例:
1.1 定义一个接口,可以具体的业务接口,也可以是一个标识
点击查看代码
/**
* 测试处理器接口 接口一
* @Author sxt
* @Date 2023/2/21 10:00
**/
public interface TestHandle<T> {
/**
* 具体的处理函数
* @param param
* @return
*/
default String process(T param){
System.out.println("没有具体的实现");
return "";
}
}
/**
* 另一个接口标识 接口二
* @Author sxt
* @Date 2023/2/21 11:01
**/
public interface ProcessHandle<T> {
/**
* 处理方式
* @param param
* @return
*/
default String process(T param){
return "";
}
}
1.2 接口的实现类
点击查看代码
/**
* Aa服务处理器, 接受String类型处理
* @Author sxt
* @Date 2023/2/21 10:15
**/
//@Service("Aa") 这里用此方式注入bean, 使用配置文件进行bean注入
public class AaHandle implements TestHandle<String> {
@Override
public String process(String param) {
System.out.println("Aa服务处理器 = " + param);
return "我是Aa服务";
}
}
/**
* Bb服务处理器, 接受Integer类型处理
* @Author sxt
* @Date 2023/2/21 10:16
**/
//@Service("Bb")
public class BbHandle implements TestHandle<Integer> {
@Override
public String process(Integer param) {
System.out.println("Bb服务处理器: " + param);
return "我是Bb服务";
}
}
/**
* @Author sxt
* @Date 2023/2/21 11:02
**/
//@Service("PA")
public class ProcessA implements ProcessHandle<String> {
@Override
public String process(String param) {
System.out.println("ProcessA 服务处理 = " + param);
return "ProcessA 处理完成";
}
}
1.3 定义一个接口标识,不需要具体实现(重要)
点击查看代码
/**
* bean工厂接口,不需要具体的实现,只需要在 服务定位工厂 中声明使用此类类型做标识即可
* 测试serviceLocatorFactoryBean 的使用
* @Author sxt
* @Date 2023/2/21 9:57
**/
public interface ProcessFactory {
/**
* 根据bean的名称获取实例对象
* @param beanName IOC容器中的bean实例, 这里可以改用对应的枚举使用,方便统一处理
* @return
*/
<T> TestHandle<T> getHandle(String beanName);
/**
* 根据bean的名称获取实例对象
* @param beanName IOC容器中的bean实例
* @return
*/
<T> ProcessHandle<T> getProcessHandle(String beanName);
}
1.4 配置并注入ServiceLocatorFactoryBean实例(重要)
点击查看代码
/**
* bean配置类
* @Author sxt
* @Date 2023/2/21 10:04
**/
@Configuration
public class BeanConfig {
/**
* 注册服务定位工厂
* @return
*/
@Bean
public ServiceLocatorFactoryBean getLocatorFactory(){
ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean();
//设置服务定位的接口类型,即代理ProcessFactory
factoryBean.setServiceLocatorInterface(ProcessFactory.class);
return factoryBean;
}
@Bean("Aa")
public AaHandle aaHandle(){
return new AaHandle();
}
@Bean("Bb")
public BbHandle bbHandle(){
return new BbHandle();
}
@Bean("PA")
public ProcessA processA(){
return new ProcessA();
}
}
1.5 测试
点击查看代码
@Autowired
ProcessFactory processFactory;
@Test
public void testGetBean(){
TestHandle<String> aa = processFactory.getHandle("Aa");
TestHandle<Integer> bb = processFactory.getHandle("Bb");
ProcessHandle<String> pa = processFactory.getProcessHandle("PA");
String param = "数据处理.....";
System.out.println("aa = " + aa.process(param));
System.out.println("bb = " + bb.process(123456));
System.out.println("Pa = " + pa.process(param));
}
2. 使用场景
2.1 可在需要对不同类型下的数据进行解析时进行处理,如:JSON解析,xml解析等类似场景
标签:return,String,Spring,param,bean,ServiceLocatorFactoryBean,public From: https://www.cnblogs.com/qiushuiyu-108/p/17140900.html