优秀的编程知识分享平台

网站首页 > 技术文章 正文

不同包下面名称的Service类(下面关于web service的描述正确的)

nanyue 2024-09-03 16:19:26 技术文章 23 ℃

在Spring Boot中,如果存在不同包下面相同名称的Service类,例如:

// 包1下的服务实现

package com.example.service.impl;

@Service("userService1")

public class UserServiceImpl implements UserService {

// ...

}

// 包2下的服务实现

package com.example.another.impl;

@Service("userService2")

public class UserServiceImpl implements UserService {

// ...

}

假设有一个控制器需要注入其中一个UserService实例:

// 控制器类

package com.example.controller;

import com.example.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import javax.annotation.Resource;

@RestController

public class UserController {

// 使用 @Autowired + @Qualifier 的方式注入指定的服务

@Autowired

@Qualifier("userService1") // 指定注入包1下的UserService

private UserService userService;

// 或者使用 @Resource 注入并指定name属性

@Resource(name = "userService2")

private UserService userService2;

// ...

}

通过上述代码示例可以看到:

?如果要通过@Autowired注入特定的服务,必须配合@Qualifier注解来明确指定Bean的名字(即对应的@Service注解上的值)。

?而使用@Resource时,可以通过设置其name属性为对应@Service注解的value,同样可以达到指定注入某个特定bean的目的。

总结来说,在有多个同名Service的情况下,单独使用@Autowired或不带name属性的@Resource是无法解决依赖注入问题的。需要通过额外的信息如@Qualifier或@Resource的name属性来区分不同的Bean。

#微头条首发挑战赛#

最近发表
标签列表