精华内容
下载资源
问答
  • 一个接口多个实现,指定实现类

    万次阅读 2018-04-14 21:49:38
    目的:一个接口多个实现时,根据不同的条件调用不用的实现1、如下接口public interface Pay { public Object pay(Map<String,Object> map); }2、如下两个实现实现一:@Service("weixinPay&...

    目的:一个接口多个实现时,根据不同的条件调用不用的实现

    1、有如下接口

    public interface Pay {
    	public Object pay(Map<String,Object> map);
    }

    2、有如下两个实现

    实现一:

    @Service("weixinPay")
    public class WeixinPay implements Pay{
        @Override
        public Object pay(Map<String, Object> map){
            return "weixinpay";
        }
    }

    实现二:

    @Service("aliPay")
    public class AliPay implements Pay{
        @Override
        public Object pay(Map<String, Object> map){
            return "alipay";
        }
    }

    3、根据不同的条件调用不同的实现

    方法一:

    @Resource(name="weixinPay")
    ShopPay weixinPay;
    	
    @Resource(name="aliPay")
    ShopPay aliPay;

    方法二:

    @Autowired
    @Qualifier("weixinPay")
    ShopPay weixinPay;
    
    @Autowired
    @Qualifier("aliPay")
    ShopPay aliPay;


    展开全文
  • spring注解识别一个接口多个实现类方法,在引用类中匹配到正确的实现类接口如下:public interface Filter { public String doFilter(String param); }接口实现类:public class TimeFilter implements Filter {...

    spring注解识别一个接口的多个实现类方法,在引用类中匹配到正确的实现类

    接口如下:

    public interface Filter {
    	public String doFilter(String param); 
    }

    接口实现类:

    public class TimeFilter implements Filter {
        @Override
        public String doFilter(String param) { 
            return param.replace("aa", "bb"); 
        } 
    }
    public class TimeFilter_B implements Filter {
        @Override
        public String doFilter(String param) { 
            return param.replace("aa", "bb"); 
        } 
    }
    使用方式:在接口实现类定义位置添加注解 @Service("timeFilter"),如下:
    import org.springframework.stereotype.Service;
    	
    @Service("timeFilter") 
    public class TimeFilter implements Filter {
        @Override
        public String doFilter(String param) {
            return param.replace("aa", "bb");
        }
    }

    在需要注入的地方使用如下方式引入:

    @Autowired
    @Qualifier("timeFilter")   //指定实现类
    Filter timeFilter;
    展开全文
  • 例子: 1. 直接new一个实例,这样肯定知道用的哪个实例 ...举个例子:A接口,A1,A2,A3实现A接口有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉 需要得到"吃肉",那么 A a = new A3(); 需要得到...

    例子:

    1. 直接new一个实例,这样肯定知道用的哪个实例
    2. 定义接口类型的变量,用某个实例去初始化。。。这样也是肯定知道用的哪个实例

    一般我们用第二种方式有一个好处,如果以后要改动,那么只需要修改其引用的实例,改动较少!

    举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉

    需要得到"吃肉",那么 A a = new A3();
    需要得到"吃饭",那么 A a = new A1();
    二、看代码发现的例子:

    接口:
    public interface CsBaseService {
    //获得总记录条数
    public int getTotalCount(JDBCBean jdbcBean);
    }

    实现类1:
    @Service
    public class CsLastUpdateService implements CsBaseService {

        @Override
        public int getTotalCount(JDBCBean jdbcBean) {
            return 0;
        }
       
    }

    实现类2:

     public class CsRelateModelService implements CsBaseService {

        @Override
         public int getTotalCount(JDBCBean jdbcBean) {
             return 2;
        }

    }

    调用的时候:

    public class RelateModelController  extends BaseController{

           @Autowired
           private CsRelateModelService relateModelService;//自动装配实现类2

           initParamProcess(relateModelService,new RelateModel(),new Page());//初始化实现类2,关键在这步,指定relateModelService为beaseService,具体见BaseController类
           int totalCount = beaseService.getTotalCount(jdbcBean);//然后直接调用实现类2的方法,输出为2

    }
    RelateModelController 的父类BaseController
    public abstract class BaseController {

            void initParamProcess(CsBaseService beaseService, JDBCBean jdbcBean,
     Page page) {
    this.beaseService = beaseService;  //指定哪个实现类为beaseService
    this.jdbcBean = jdbcBean;
    this.page = page;
    }

    }

    展开全文
  • 最近写了前台一个管理模块,后来也是我来写,采用四层架构,在定义接口时,基本是一个接口对应一个实现类,使用@Autowired注解,但我想如果有多个实现类,如何注解,来梳理一下 举例说明: 1、接口:IAnimal 2、实现...

    最近写了前台一个管理模块,后来也是我来写,采用四层架构,在定义接口时,基本是一个接口对应一个实现类,使用@Autowired注解,但我想如果有多个实现类,如何注解,来梳理一下

    举例说明:

    1、接口:IAnimal

    public Interface IAnimal{
    	......
    }
    

    2、Impl实现:DogImpl ,实现了IAnimal接口。

    @Service("dogImpl")
    public classDaoImpl impliments Animal{
    	...
    }
    

    3、Controller:AnimalController

    public class AnimalController{
    	@Autowired
    	private IAnimal dogImpl;
    	......
    }
    

    假如有一个“动物”的接口 IAnimal, DogImpl类实现了接口 IAnimal, 且该接口只有 DogImpl这一个实现类,那么在引用实现类的时候,我们使用的是实现类的接口(像上面程序展示的那样)。Spring会按 byType的方式寻找接口的实现类,将其注入。

    假如有另一个实现类 CatImpl 也实现了接口 IAnimal, 这时候再按上面的方式去引用, 在同时存在两个实现类的情况下,会出现什么情况呢?

    答:会报错。 这是由于 @Autowired 的特性决定的: @Autowired 的注入方式是 byType 注入, 当要注入的类型在容器中存在多个时,Spring是不知道要引入哪个实现类的,所以会报错。

    那么在同一类型拥有多个实现类的时候,如何注入呢?

    答:这种场景下,只能通过 byName 注入的方式。可以使用 @Resource 或 @Qualifier 注解。

           @Resource 默认是按照 byName 的方式注入的, 如果通过 byName 的方式匹配不到,再按 byType 的方式去匹配。所以上面的引用可以替换为:

    public class AnimalController{
    	@Resource(name="dogImpl")
    	private IAnimal dogImpl;
    	......
    }
    

    @Qualifier 注解也是 byName的方式,但是与@Resource 有区别,@Qualifier 使用的是 类名。

    public class AnimalCOntroller{
    	@Qualifier("DaoInpl")
    	private IAnimal dogImpl;
    	...
    }
    

    总结:

    1、@Autowired 是通过 byType 的方式去注入的, 使用该注解,要求接口只能有一个实现类。

    2、@Resource 可以通过 byName 和 byType的方式注入, 默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。

    3、@Qualifier 注解可以按名称注入, 但是注意是 类名。

    展开全文
  • 1、一个实现类实现多个接口 例如:serviceImpl implements Interface1,Interface2 在controller中 ...2、一个接口多个实现类,注入指定的实现类 例如:Interface 接口两个实现类 Interfac...
  • 一个接口有多个实现类的调用方式

    千次阅读 2019-02-25 10:27:21
    A用户调用Aservice实现类,B用户调用Bservice实现类 1、使用switch-case public static Person printPerson(int kind) { Person p = null; switch (kind) { case FIRST: p = new A(&quot;人1&quot;);...
  • 而抽象在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象一个典型应用,假设某个项目的所有Servlet都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个...
  • @Autowired一个接口有多个实现类

    万次阅读 2019-04-24 17:25:34
    @Autowired是spring的注解,默认使用的是byType的方式向Bean里面注入相应的Bean。例如: @Autowired private UserService userService; 这段代码会在初始化的时候...但是如果UserService这个接口存在多个实现类的时...
  • 所以用到了一个接口多个实现类,每个实现类查询不同数据库。记录一下接口是怎么调用不同的实现类的。 定时任务一: 定时任务二: 同时继承了一个实现类AbstractSendDataTask   applicationContext.xml...
  • 实现动态调用,方法种,在这里记下种我觉得比较简单的,方便以后翻阅。 接口类 package com.su.mybatis.oracle.service; public interface TestService { String firstStep(); String secondStep()...
  • 一个接口有多个实现类,当调用接口中的方法时,如何判定用的是哪个实现类? 1.直接new一个子类实例,这样肯定知道用的哪个实例。 2.定义接口类型的变量,用某个实例去初始化,这样也可以确定用的哪个实例。 代码...
  • (定义了CommonService接口,同时个两个子类实现了这个接口,同时两个实现类上都加了@Service注解,表明在项目启动时,这两个实现类都会被维护到Spring容器中) 1.在需要被注入的实现类上加注解@Primary 比如...
  • 一、简单例子: 1.直接new一个实例,这样肯定知道用的哪个实例 2.定义接口类型的变量,...举个例子:A接口,A1,A2,A3实现A接口有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉 需要得到"吃肉",那么Aa=newA3(); ...
  • 一个类可以实现多个接口,但是只能继承一个类
  • 方法 的方式,通过ctrl+alt+b快捷键发现接口有多个实现类 这种情况恰可以使用debug,来查看具体调用的是哪个实现类的方法,操作如下: 1.打断点 2.以debug模式运行项目 3.在断点处,复制想要查看的代码,并在...
  • 1、接口:IUserService public interface IUserService { ...2、实现类:UserServiceImpl,实现了UserService接口 @Service("UserServiceImpl ") public class UserServiceImpl implements IUser...
  • 多继承会产生钻石问题(菱形继承) B 和 C 继承自 A,且都重写了 A 中的同一个方法 ...接口中的方法是抽象的,一个类实现可以多个接口 假设这些接口中存在相同方法(方法名与参数相同),...
  • 参考文章:https://blog.csdn.net/mazuyu408/article/details/79629846 ... 先说明下场景,代码如下: 如下接口: public interface EmployeeService { public EmployeeDto...
  • 话不多说: ...三、建立实现多个实现类:用于实现具体方法(注意:实现类需要注入容器) 四、建立操作类型工厂 五、使用方法示例:这个标注的对象就是根据请求参数的类型来动态选择的。 ...
  • 接口 接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
  • hibernate的Session接口,查看文档发现它被4类实现了,所以就疑问,当我开始调用Session中的方法时,它到底是被哪个实现类所实现的? ![图片说明]...
  • 一个接口多个实现类 - Spring 的 @Autowired 和 @Qualifier 配合注入 1. 首先, Interface1 接口两个实现类 Interface1Impl1 和 Interface1Impl2 Interface1 接口: package com.example.service; /** * ...
  • 1.比如有一个接口如下: [java] view plain copy public interface Filter {   public String doFilter(String param);  }  2.如下接口实现类: ...
  • 1、首先,有一个接口PersonService,然后再写两个实现类PersonServiceImp1、PersonServiceImp2 2、进行测试 如果我们直接注入接口的话,idea就会给我们报错 3、解决办法 其实自动注入时,它首先会先根据class类型...
  • 接口或服务 public interface CacheServiceextends Serializable, K extends Serializable> { ...实现类1 @Service("redisCacheService") public class RedisCacheServiceImpl implements CacheService {
  • 一个接口能继承另一个接口,和之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。 下面的Sports接口被Hockey和Football接口继承: // 文件名: Sports.java public interfa
  • 先写一个场景,举例说明:1、接口:IAnimalpublic Interface IAnimal{  ...... }2、实现类:DogImpl ,实现了IAnimal接口。@Service("dogImpl") public class DaoImpl impliments IAnimal{  ... }3、...
  • Java - 一个类实现多个接口相同签名的default方法会怎么办 public interface A { default void hello() { System.out.println("Hello from A"); } } public interface B extends A { default ...
  • 根据前台返回的不同参数,选择一个接口不同的实现类来实现不同业务逻辑,我们用到了proxy代理类。 首先是spring.xml 配置文件 如下:(proxy 代理类 ××ServiceImpl实现类) 代理类代码 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,918,357
精华内容 767,342
关键字:

一个接口有多个实现类