spring注解注入泛型

最近在学spring的注解,但是现在遇到难题了,望各位帮下小弟的忙?
以下是项目的工程图

dao和service都使用了泛型设计
泛型dao接口
Java code
?
1
public interface BaseDao<T, PK extends Serializable> {

泛型dao实现类
Java code
?
1
public class BaseDaoImpl<T, PK extends Serializable> implements BaseDao<T, PK> {

学员接口
Java code
?
1
public interface StudentDao extends BaseDao<Student, Integer> {

学员实现类
Java code
?
1
2
@Repository
public class StudentDaoImpl extends BaseDaoImpl<Student, Integer> implements StudentDao {

使用junit进行测试的时候会报下面的异常。
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [cn.ssh.annotation.dao.BaseDao] is defined: expected single matching bean but found 4: baseDaoImpl,studentDaoImpl,teacherDaoImpl,studentServiceImpl
Java code
?
1
2
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDao studentDaoImpl = (StudentDaoImpl) context.getBean("studentDaoImpl")


不知道为什么会这样,难道spring不支持泛型的注解吗?
还有想问下,ssh整合的话,有哪些注解可以用,每个框架都要相应的jar包吗?
spring如何对事物进行注解呢?
或者能够提供相应的文档或者链接地址.
小弟将万分感谢!!!
### Kotlin 中 `@Autowired` 注解结合使用的示例 在 Spring 和 Kotlin 的开发环境中,`@Autowired` 是用于依赖注入的核心注解之一。当涉及到时,可以通过定义带有的 Bean 来实现自动装配的功能。 以下是关于如何在 Kotlin 中使用 `@Autowired` 结合的一个具体例子: #### 示例代码 ```kotlin import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service // 定义一个通用的服务接口 interface BaseService<T> { fun process(data: T): String } // 实现针对特定数据类的服务 @Service class IntegerService : BaseService<Int> { override fun process(data: Int): String { return "Processed integer: $data" } } @Service class StringService : BaseService<String> { override fun process(data: String): String { return "Processed string: $data" } } // 使用 @Autowired 自动装配带的 Bean @Service class Processor { @Autowired private lateinit var integerService: BaseService<Int> @Autowired private lateinit var stringService: BaseService<String> fun handleData(data: Any): String { return when (data) { is Int -> integerService.process(data) is String -> stringService.process(data) else -> "Unsupported type" } } } ``` 上述代码展示了如何通过 `@Autowired` 将不同类服务注入到同一个类中[^4]。 - `BaseService<T>` 是一个接口。 - `IntegerService` 和 `StringService` 分别实现了该接口的不同特化版本。 - 在 `Processor` 类中,分别注入了两个不同的服务实例,并根据输入的数据类动态调用对应的方法。 --- ### 关键点解析 1. **延迟初始化 (`lateinit`)** - 在 Kotlin 中,由于非空属性必须在构造函数中初始化,而 Spring 的依赖注入发生在对象创建之后,因此需要使用 `lateinit` 或者可空类来声明字段。 2. **Spring的支持** - Spring 能够识别并区分基于的 Bean,前提是这些 Bean 已经被正确注册到容器中。如果遇到反射无法获取实际类的情况(如 Java 中提到的擦除问题),则需确保在编译期保留足够的类信息[^3]。 3. **Kotlin 与的安全性** - Kotlin 提供了更严格的类检查机制,能够有效避免运行时错误的发生。例如,在上面的例子中,`process` 方法会强制要求传入正确的参数类,从而减少潜在的风险。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值