0 0

Spring如何能 Autowired某个接口的具体实现10

假设我有某个接口
public interface DataService


它的某个具体实现是
public class DateServiceImpl implements DataService



在我程序的某个地方,想注入这个服务,然而因为某种原因我只想注入它的具体实现,类似如下
@Autowired
DateServiceImpl dateServiceImpl; 


此时程序会报错No unique bean of type....
请问有什么办法直接注入某个接口的实现,我记得我曾经在某个系统里这样使用过,具体方法忘记了,也是这样写没出错。



问题补充:补充一下,可能是我没有把问题描述清楚
一般我们是用以下方式注入
@Autowired  
DateService dateServiceImpl; 


现在我想把将上面的接口类型写为具体的实现类
即声明成DateServiceImpl dateServiceImpl;

现在是报错,这个做法我记得是可以的,但时间久远已经忘记了。

问题补充:
aabcc 写道
@Autowired  默认是byType 方式

要用byType方式注入的话 你的spring上下文里(也就是配置文件里) 只能有一个
class = DateServiceImpl 的声明


你和我说的不是一个问题

问题补充:你还是没明白我
并不是说在运行时改变变量类型
而是我在注入时直接用实现来注入
将原来的写法
@Autowired     
DateService dateServiceImpl;  

更换为
@Autowired     
DateServiceImpl dateServiceImpl;  


2010年12月08日 14:21

2个答案 按时间排序 按投票排序

0 0

那就改在配置文件里,将 autowired="byName"

<Bean id="dateServiceImpl1" class="DateServiceImpl1"/>

<Bean id="dateServiceImpl2" class="DateServiceImpl2"/>

你想注入1 实现1 (dateServiceImpl1)

那你变量名就是

DateService dateServiceImpl1;

你想注入2 实现2 (dateServiceImpl2)

那你变量名就是

DateService dateServiceImpl2;


引用
补充一下,可能是我没有把问题描述清楚
一般我们是用以下方式注入
Java代码
@Autowired   
DateService dateServiceImpl;  


现在我想把将上面的接口类型写为具体的实现类
即声明成DateServiceImpl dateServiceImpl;

现在是报错,这个做法我记得是可以的,但时间久远已经忘记了。


你想把 DateService dateServiceImpl 变成 DateServiceImpl dateServiceImpl ?

你是不是打错字了? 变量类型在运行时怎么能允许改变? 要是能改变,你的代码怎么在编译期怎么确定method?

2010年12月08日 16:33
0 0

@Autowired  默认是byType 方式

要用byType方式注入的话 你的spring上下文里(也就是配置文件里) 只能有一个
class = DateServiceImpl 的声明

2010年12月08日 15:35

相关推荐

    spring的annotation的autowired

    通过实现`AutowiredAnnotationBeanPostProcessor`或`BeanFactoryPostProcessor`接口,可以自定义`@Autowired`的解析逻辑。 ### 6. 结论 `@Autowired`是Spring框架中重要的依赖注入方式,它简化了Bean的配置,提高...

    SSM定时访问某个接口

    本篇文章将详细讲解如何在Java Web项目中利用Spring框架的定时功能(SSM:Spring、SpringMVC、Mybatis集成环境)来定时访问某个接口。 首先,我们需要引入定时相关的jar包。在描述中提到,word文档中包含了这些jar...

    spring IOC实现(墨者革离)

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交给了Spring容器,从而让开发者从繁琐的依赖管理中解脱出来,更专注于业务逻辑的实现。在这个名为"spring_IOC实现...

    使用Java自定义注解模拟实现SpringBoot相关注解.zip

    接着,我们可以创建一个实现了`BeanPostProcessor`接口的类,这个接口允许我们在bean实例化之后进行处理。 ```java @Component public class MyAutowiredProcessor implements BeanPostProcessor { @Override ...

    spring的Applicationcontext对事件的监听,实现类似MQ的效果

    这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。下面我们将深入探讨Spring的`ApplicationContext`如何实现事件监听以及其在实际开发中的应用。 首先,`ApplicationContext`的...

    Spring+SpringMvc+Mybatis学生管理系统

    - 编写Service层业务逻辑,使用Spring的@Autowired注解注入需要的依赖。 - 创建Controller层,处理HTTP请求,调用Service层的方法,返回结果给前端。 - 开发前端界面,可以使用JSP、Thymeleaf或其他模板引擎,...

    Spring IOC容器实现分析.pdf 下载

    在实际开发中,我们可以使用Spring的IOC容器来管理数据库连接池、事务管理器、服务接口的实现类等。例如,通过@Qualifier注解指定特定的Bean,使用@Autowired注解自动注入依赖,或者通过@Scope注解定义Bean的作用域...

    面向接口编程

    这样,我们可以在不关心具体实现的情况下编写更通用的代码。 Spring框架是Java开发中广泛使用的轻量级容器,它非常注重面向接口编程。例如,Spring通过依赖注入(Dependency Injection,DI)机制,使得开发者可以很...

    Spring的学习笔记

    面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们通常定义服务接口,并在配置文件中指定其实现类,这样可以在不修改...

    Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

    本项目旨在通过一个具体的案例来演示如何将 Spring Boot 1.5.2、Spring Security 4 以及 Spring Data JPA 进行整合。这三个框架都是当前 Java Web 开发领域内非常流行的工具和技术,它们能够极大地提高开发效率,...

    Spring_控制反转_工厂模式

    在简单工厂模式中,工厂类负责决定实例化哪个类,客户端通过调用工厂方法获取所需对象,降低了客户端与具体实现类之间的耦合。 **Spring中的IoC与工厂模式对比** 虽然简单工厂模式在某些场景下能有效地创建对象,...

    Spring基础教学视频

    - **BeanFactory**:Spring的核心接口之一,提供了配置管理的功能,是工厂模式的一种具体实现。 - **ApplicationContext**:扩展了BeanFactory的功能,提供了一种基于XML的配置方式,并且支持国际化、事件发布等...

    spring2.0学习源码

    Spring 2.0支持了对构造器、setter方法和接口的自动装配,同时增加了@Required和@Autowired注解。@Required表示该属性必须通过DI进行设置,而@Autowired则可以根据类型或名称自动匹配依赖,极大地减少了手动配置的...

    spring核心架构

    在Spring框架中,DI允许开发者声明对象间的依赖关系,而无需知道具体实现的细节。Spring容器负责根据配置信息创建和组装这些对象,将依赖的对象注入到需要它们的地方。这样,当需要改变某个服务的实现时,只需要更改...

    Spring核心源码解析.pdf

    此时,可以使用外部配置文件来解耦代码实现,例如通过Properties配置文件来指定具体实现类。 在Java中,反射机制是一个强大的特性,允许程序在运行时检查、修改和创建对象。Spring框架大量使用了Java反射API来实现...

    高级Java人才培训专家-spring高级49讲

    - **@Autowired底层**:深入研究Spring中@Autowired注解的实现原理。 - **事件监听器**:介绍Spring事件模型中的事件监听器。 - **事件发布器**:探讨Spring事件模型中的事件发布机制。 通过以上详细解析,可以看出...

    spring mybatis

    5. 简化编码:通过Mapper接口,开发者只需关注业务逻辑,无需关心SQL的具体实现,提高了开发效率。 四、实例分析 文件"mydemo20130403.dmp"可能是数据库的导出文件,用于数据迁移或备份,而"myDemo"可能是项目中的...

    spring4.2.4源码

    `BeanFactory`接口和它的实现`ApplicationContext`是IoC容器的基石,负责创建、管理并装配bean。此外,`@Autowired`注解和XML配置文件中的`&lt;bean&gt;`标签是实现依赖注入的主要方式。 接下来,我们转向AOP。AOP是一种...

    Spring核心学习IOC部分

    另外,还可以通过实现`InitializingBean`和`DisposableBean`接口,或者使用`@PostConstruct`和`@PreDestroy`注解来定制初始化和销毁行为。 在处理复杂的依赖关系时,Spring支持了基于类型和基于名称的依赖查找,...

    mybatis3+spring4+struts2.3整合jar

    这个压缩包文件 "mybatis3+spring4+struts2.3" 很可能包含了这三者集成所需的配置文件(如struts.xml、spring配置文件、mybatis的mapper配置等)、Java源代码(Action、Mapper接口及其实现、DAO等)以及相关的jar...

Global site tag (gtag.js) - Google Analytics