温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Parameter参数如何注入

发布时间:2026-10-04 08:19:28 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 里,“Parameter 参数如何注入”通常出现在Spring 框架或方法参数注入的语境中。下面按常见场景给你系统说明。


一、Spring MVC 中 Controller 方法参数注入(最常见)

1. 基本类型 / 简单参数(@RequestParam)

@GetMapping("/user")
public String getUser(@RequestParam("id") int id) {
    return "id=" + id;
}
  • URL:/user?id=1
  • Spring 自动将请求参数注入方法参数

省略写法:

@RequestParam int id

(参数名需一致)


2. Path 路径参数(@PathVariable)

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int id) {
    return "id=" + id;
}

URL:/user/1


3. 表单 / JSON 对象(@ModelAttribute / @RequestBody)

表单

@PostMapping("/user")
public String addUser(User user) {
    return user.toString();
}

JSON

@PostMapping("/user")
public String addUser(@RequestBody User user) {
    return user.toString();
}

4. Header / Cookie 注入

@GetMapping("/header")
public String header(@RequestHeader("Authorization") String token,
                      @CookieValue("sessionId") String sessionId) {
    return token + sessionId;
}

二、Spring 依赖注入中的“参数注入”

1. 构造器注入(推荐)

@Service
public class UserService {
    private final UserRepository repo;

    public UserService(UserRepository repo) {
        this.repo = repo;
    }
}

✅ Spring 自动注入构造参数


2. Setter 方法参数注入

@Autowired
public void setRepo(UserRepository repo) {
    this.repo = repo;
}

3. 方法参数直接注入(@Autowired 方法)

@Autowired
public void init(Config config, Env env) {
    // 参数自动注入
}

三、自定义参数解析(高级)

1. 自定义注解 + HandlerMethodArgumentResolver

public class CurrentUser {}
public class CurrentUserResolver implements HandlerMethodArgumentResolver {
    public boolean supportsParameter(MethodParameter p) {
        return p.hasParameterAnnotation(CurrentUser.class);
    }

    public Object resolveArgument(...) {
        return SecurityUtils.getUser();
    }
}

注册:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> r) {
        r.add(new CurrentUserResolver());
    }
}

使用:

public String info(@CurrentUser User user)

四、普通 Java 方法参数“注入”(非 Spring)

如果是反射调用方法并注入参数:

Method m = obj.getClass().getMethod("test", String.class);
m.invoke(obj, "value");

五、常见坑

❌ 参数名丢失(编译未保留)

  • 解决:使用 @RequestParam("xxx")

❌ JSON 注入失败

  • 确保 @RequestBody
  • 字段有 getter/setter

✅ 构造器注入最安全、可测试


如果你指的是 某个具体框架(Spring / Spring Boot / MyBatis / JAX-RS) 或 某种 Parameter(如 SQL、注解、配置),可以直接说场景,我可以给更精确的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手