Hi,大家好,我是一个爱冒泡的程序猿 小编今天最近遇到的一个问题就是,有一个水果的Service,它的实现类中,同样方法名的有两个,一个是“榴莲”,一个是“苹果”(万一榴莲坏了,还有苹果吃٩(๑❛ᴗ❛๑)۶),如何优雅的决定它的出现。 有几个解决方法,顺序:从差到优~ 由于“榴莲”和“苹果”都在这个实现类里,方法名相同,所以只能把一方先注掉 优点:只是实现需求,无任何优点可言,无任何美感可言 在方法一的基础上,把水果的service实现类拆分为两个,一个是“榴莲”实现类,一个是“苹果”实现类 Controller Service “榴莲”实现类 “苹果”实现类 优点:在controller中修改@Qualifier的值就可以变化 和方法二差不多,只不过在Controller注入的时候使用注解@Resource 替换了 @Autowire + @Qualifier实现,具体代码如下: Controller Service “榴莲”实现类 “苹果”实现类 优点:在controller中修改@Resource 的值就可以变化 通过配置文件动态配置,实现类中只需要用 @Configuration+@ConditionalOnProperty application.yml Controller Service “榴莲”实现类 “苹果”实现类 优点:只需要修改配置就可以决定使用哪个实现类,如此甚好,也不需要额外的配置文件,优雅的很 参考文章: 可能是我第一次使用这个注解,真香啊(•̀∀•́)棒 掰掰~ 奔向阿里的第7天
有事情耽搁的好几天没更新了,每日一更计划又泡汤了(灬ꈍ ꈍ灬)方法一:
这个方法最烂也最不友好,小编是由于忙于开发,就先这样跳过去了做其他的了,大家不要学我(´•༝•`)
缺点:每次都得手动改代码,想吃“榴莲”,得把“苹果”注释掉,反之方法二:
在Controller中 注入service,通过注解 @Autowire + @Qualifier实现,具体代码如下: @Autowired @Qualifier("durian") private FruitService fruitService;
/** * Created by git on 2020/4/21. * * @author Emelia */ public interface FruitService { String getFruit(); }
/** * 榴莲 * * @author Emelia */ @Service("durian") @Slf4j public class durianServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "榴莲"; return fruit; } }
/** * 苹果 * * @author Emelia */ @Service("apple") @Slf4j public class appleServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "苹果"; return fruit; } }
缺点:还是得手动修改代码内容,一个Controller调用还好,如果有多个Controller调用就都得相应的更改方法三:
@Resource("durian") private FruitService fruitService;
/** * Created by git on 2020/4/21. * * @author Emelia */ public interface FruitService { String getFruit(); }
/** * 榴莲 * * @author Emelia */ @Service("durian") @Slf4j public class durianServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "榴莲"; return fruit; } }
/** * 苹果 * * @author Emelia */ @Service("apple") @Slf4j public class appleServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "苹果"; return fruit; } }
缺点:还是得手动修改代码内容,一个Controller调用还好,如果有多个Controller调用就都得相应的更改方法四:
不需要@Service ,这两个注解也可以注入Service,具体代码如下:fruit: impl: apple
@Autowired private FruitService fruitService;
/** * Created by git on 2020/4/21. * * @author Emelia */ public interface FruitService { String getFruit(); }
/** * 榴莲 * * @author Emelia */ @Slf4j @Configuration @ConditionalOnProperty(prefix = "fruit", name = "impl", havingValue = "durian") public class durianServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "榴莲"; return fruit; } }
/** * 苹果 * * @author Emelia */ @Slf4j @Configuration @ConditionalOnProperty(prefix = "fruit", name = "impl", havingValue = "apple") public class appleServiceImpl implements FruitService { @Override public String getFruit() { String fruit = "苹果"; return fruit; } }
缺点:好用,暂时没发现缺点
https://blog.csdn.net/mengxiangxingdong/article/details/87919315
如果有更好的方式,欢迎大家前来踢馆~
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算