在 Java 里“参数注入”这个说法在不同场景含义不一样,下面按常见场景给你系统讲一下,你可以对号入座。
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
✅ Spring 自动注入 UserRepository
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@GetMapping("/user")
public String getUser(@RequestParam("id") Long id) {
return "id = " + id;
}
常用注解:
@RequestParam → 请求参数@PathVariable → URL 路径@RequestBody → JSON body@RequestHeader → 请求头@Value@Value("${app.name}")
private String appName;
@ConfigurationProperties(推荐)@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private int port;
// getter / setter
}
yml:
app:
name: demo
port: 8080
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {}
在 Controller:
public String info(@CurrentUser User user)
通过 HandlerMethodArgumentResolver 实现注入逻辑。
java -jar app.jar --server.port=9090
代码中:
@Value("${server.port}")
private int port;
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
}
❌ 静态变量不能注入
❌ new 出来的对象不会注入
❌ 非 Spring 管理的类不能用 @Autowired
如果你指的是 某个具体框架(如 MyBatis、Spring MVC、JUnit、自定义注解) 或 某个具体报错,直接把代码或异常贴出来,我可以精准帮你改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。