飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

java接口多实现注入方法总结-

时间:2022-05-26  作者:Ddlm2wxm  

1. 单实现接口注入方法

1.1 构造注入(推荐)

@RequiredArgsConstructor
public class TestController {

    // 其只有一个具体的实现类
    private final DemoService demoService;
}

1.2 全参构造注入

@AllArgsConstructor
public class TestController {

    DemoService demoService;
}

注: 当需要注入的全部是service时候, 这两种没有区别, 但是如果要使用@Value等其他注解时, 全参注入会报null. (@Value只是举例, @Value可以使用hutool中的SpringUtil方法代替)

1.3 @Autowired(Spring提供) 与 @Resource(J2EE提供)直接用即可

2. 多实现接口注入方法

public interface BaseService {

    /**
     * 创建对象
     *
     * @param obj 对象
     * @return 成功返回id
     */
    public int crate(String obj);
}

import 域名域名ice;
@Service("baseStudent")
public class BaseStudentServiceImpl implements BaseService {

    @Override
    public int crate() {
        域名tln("添加学生");
        return 1;
    }
}

import 域名域名ice;
@Service("baseTeacher")
public class BaseTeacherServiceImpl implements BaseService {

    @Override
    public int crate() {
        域名tln("添加老师");
        return 2;
    }
}

2.1 错误尝试

如果还使用以上任意一种方法进行注入的话, 都会报found 2 异常, 具体描述可能不同.

2.2 @Service上添加各自的名称,

注入时候使用@Qualifier("baseStudent")进行指定.

public class TestController {

    @Autowired
    @Qualifier("baseStudent")
    private BaseService baseService;
}

2.3 使用@Resource指定.

public class TestController {

    @Resource(name = "baseStudent")
    private BaseService baseService;
}

2.4 尝试参数注入方法

  • @Setter(onMethod_ = {@Qualifier("")}, onParam = @__(@Qualifier("")))

  • @RequiredArgsConstructor(onConstructor_ = {@Qualifier("")})

都没有成功, 可能是方向错了.

2.5 变量名指定

@RequiredArgsConstructor
public class TestController {

    // 与1.1和1.2用法相同, 变量名为Service的名字
    private final BaseService baseStudent;
}

3. 微服务下的注册与使用

3.1 注册时添加分组名称

public interface BaseService {

    /**
     * 创建对象
     *
     * @param obj 对象
     * @return 成功返回id
     */
    public int crate(String obj);
}

import 域名域名域名ice;;
@Service(group = "baseStudent")
public class BaseStudentServiceImpl implements BaseService {

    @Override
    public int crate() {
        域名tln("添加学生");
        return 1;
    }
}

import 域名域名域名ice;e;
@Service(group = "baseTeacher")
public class BaseTeacherServiceImpl implements BaseService {

    @Override
    public int crate() {
        域名tln("添加老师");
        return 2;
    }
}

3.2 使用时使用分组名称进行指定

import 域名域名域名rence;
public class TestController {

    @Reference(group = "baseStudent")
    private BaseService baseService;
}

2.几中的方法并非尝试

4. 参考

  • Is it possible to add qualifiers in @RequiredArgsConstructor(onConstructor = @__(@Autowired))?

  • 有没有可能在@RequiredArgsConstructor(onConstructor = @__(@Autowired))中添加限定符?

注: 第二个是第一个翻译

标签:Java编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。