Spring中的@Service("dataDictionaryService")注解

1、接口

public interface DataDictionaryService {
    /**
     * 获取兑换率
     * @param coinType 原币种
     * @param billCoin 折币种
     * @param date 取离该时间最近的兑换率
     * @return
     */
    public BigDecimal getExch(String coinType, String billCoin, Date date);

}

如图,有两个实现类。

2、实现类

@Service("dataDictionaryService")
public class DataDictionaryCache implements DataDictionaryService{
    @Autowired
    private DataDictionaryServiceImpl dataDictionaryService;

    private Map<ExchConditions,Exch> exchMap = new ConcurrentHashMap<>();

    @Autowired
    private CacheManager cacheManager;

    //private Map<PrpDcurrency,prpDcurrency> prpDcurrencyMap=new ConcurrentHashMap<>();

    @Override
    public BigDecimal getExch(String coinType, String billCoin, Date date) {
        ExchConditions exchConditions = new ExchConditions(coinType,billCoin,date);
        if(!exchMap.containsKey(exchConditions)
                || exchMap.get(exchConditions).isTimeout()){
            BigDecimal exch = dataDictionaryService.getExch(coinType,billCoin,date);
            exchMap.put(exchConditions,new Exch(exch));
        }
        return exchMap.get(exchConditions).getExchrate();
    }}
@Componentpublic class DataDictionaryServiceImpl implements DataDictionaryService {

    @Autowired    private DictAPIService dictService;

    @Autowired    private RelationBreakMapper relationBreakMapper;

    @Autowired    private OutstandingBreakMapper outstandingBreakMapper;    @Autowired    private AssessBreakMapper assessBreakMapper;

    /**     * 获取兑换率     * @param coinType 原币种     * @param billCoin 折币种     * @param date 取离该时间最近的兑换率     * @return     */    @Override    public BigDecimal getExch(String coinType, String billCoin, Date date) {        PrpDexch exch = null;        try {            exch = dictService.getPrpDexch("dms", date, coinType, billCoin);        } catch (Exception e) {

            return BigDecimal.ZERO;        }        return exch == null ? BigDecimal.ZERO : exch.getExchRate().divide(new BigDecimal(exch.getBase()));    }

3、调用

@Controller
@RequestMapping(value ="/dataDict")
public class DataDictController {

    @Autowired
    private DataDictionaryService dataDictionaryService;

说明:当一个接口有两个实现类时,需要在一个实现类的注解后加上@Service("dataDictionaryService")引号中的说明,在Controller调用时,属性名称必须与引号中的名称一致,不然无法识别创建哪个实现类的Bean。

其实会出现编译报错如下:

不能自动装配。“DataDictionaryService”类型的bean不止一个。

bean:

dataDictionaryCache (dataDictionaryCache .java)

dataDictionaryServiceImpl (dataDictionaryServiceImpl .java)

原文地址:https://www.cnblogs.com/vole/p/12166225.html

时间: 2024-08-30 01:14:24

Spring中的@Service("dataDictionaryService")注解的相关文章

Spring中@Resource、@controller注解的含义

@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象. Spring确实支持使用@Resource通过JNDI lookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的"bean name(bean名字)"的Spring管理对象会被注入. 在下面的例子中,Spring会向加了注解的setter方法传递bean名为"dataSour

Spring中同一个service中方法相互调用事务不生效问题解决方案

问题描述: 我们在用Spring框架开发Web项目过程中,经常需要用同一个service中的一个方法调用另一个方法,如果此时调用方没有添加事务注解@Transactional,而在被调用方添加事务注解@Transactional,当被调用方法中出现异常,这时候会发现事务并没有回滚,事务注解@Transactional没有起作用. 分析原因: 我们知道Spring中事务管理是使用AOP代理技术实现的,目标对象自身并没有事务管理功能的,而是通过代理对象动态增强功能对事务进行增强的.因此当我们在同一个

Spring中的属性注入注解

@Inject使用 JSR330规范实现的 默认按照类型注入 如果需要按照名称注入,@Inject需要和@Name一起使用 @Resource JSR250规范实现的,需要导入不同的包 @Resource是按照名称匹配的 @Autowired Spring中定义的注解 默认按照类型注入 如果需要按照名称注入,需要配合@Qualifier注解一起使用 包含一个require属性 原文地址:https://www.cnblogs.com/watertreestar/p/11780306.html

Spring 中的 18 个注解,你会几个?

阅读本文大概需要 4 分钟. 作者:Java的小本家 @Controller 标识一个该类是 Spring MVC controller 处理器,用来创建处理 http 请求的对象. @RestController Spring4 之后加入的注解,原来在 @Controller 中返回 json 需要 @ResponseBody 来配合,如果直接用 @RestController 替代 @Controller 就不需要再配置 @ResponseBody ,默认返回 json 格式. @Servi

spring中@Scope作用域的注解

@Scope简单点说就是用来指定bean的作用域 官方解释是:scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象 默认是单例模式,即singleton:Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例,一个容器对应一个bean. prototype

main方法调用spring中dao service方法

public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); System.out.println("aaa"); // ServiceReportService service = (ServiceReportService)context.getBean(&quo

JavaEE开发之Spring中的依赖注入与AOP编程

一.快速创建Mava管理的Spring工程 因为本篇博客是讨论关于Spring的东西,所以我们就不创建WebApp的工程了.我们使用Spring来快速的创建一个Maven管理的工程.如下所示找到File->New->Maven Project选项来创建一个新的Maven Project,具体如下所示: 下方我们选择创建一个简单的Maven工程,跳过模板的选择.上篇博客我们在创建Maven工程时,是没有选择下方这个选项的,然后我们选择了一个WebApp的模板.而本篇博客,我们不需要WebApp的

spring总结(02)注解

1. Spring IOC 注解基本应用 1.1. Spring Bean 注解描述 Spring容器中描述bean的方式有两种,一种是基于xml方式,一种是基于注解方式.,现阶段基于注解方式描述Bean元素已经成为一种趋势.Spring中常用的bean注解有如下几种: 1) 修饰Bean对象的注解.(xml中描述bean使用<bean>) a) @Configuration(描述Bean为一个配置对象) b) @Component(描述Bean为一个一般组件组件) c) @Controlle

你可能使用了Spring最不推荐的注解方式

前言 使用Spring框架最核心的两个功能就是IOC和AOP.IOC也就是控制反转,我们将类的实例化.依赖关系等都交由Spring来处理,以达到解耦合.利用复用.利于测试.设计出更优良程序的目的.而对用户来说,操作最对的便是注解.在Spring中提供了三类注解方式,下面我们就逐一分析.最后,你会发现,你最常用.看起来最方便的形式确实最不推荐的一种形式. 常见的注入方式 Field注入 @Controller public class FooController { @Autowired // @