请分别写三个简单且完整的代码演示spring中的基于注解的注入,构造方法注入和setter注入,要求在网页中有输出,需要详细说明每个类分别存放在哪个包中
时间: 2024-09-17 17:08:41 浏览: 35
spring setter 和构造 注入 例子 spring 4.2.0
在Spring框架中,基于注解的依赖注入是非常常见的。以下是三种类型的注入示例:
1. **基于注解的构造方法注入**(`@Autowired`):
```java
// 定义在com.example.demo.service包下的MyService类
@Service("myService")
public class MyServiceImpl implements MyService {
private final MyDependency dependency;
@Autowired
public MyServiceImpl(MyDependency dependency) { // 使用@Autowired自动注入
this.dependency = dependency;
}
public void doSomething() {
System.out.println("Doing something with " + dependency.getName());
}
}
// com.example.demo.dependency包下的MyDependency类
public class MyDependency {
private String name;
// getters and setters...
}
```
2. **基于注解的 setter 注入**(`@Autowired`或`@Resource`):
```java
// MyController.java位于com.example.demo.controller包下
@RestController
public class MyController {
private MyService myService;
// 使用@Resource,如果找不到构造函数则通过setter注入
@Resource(name = "myService")
public void setMyService(MyService myService) {
this.myService = myService;
}
@GetMapping("/doSomething")
public String doSomething() {
return myService.doSomething();
}
}
```
3. **基于注解的字段注入**(`@Autowired`):
```java
// 如果MyComponent接口存在,则MyComponentImpl类应该放在com.example.demo.component包下
@Component
public class MyComponentImpl implements MyComponent {
@Autowired
private MyService myService;
public String process() {
return myService.doSomething();
}
}
// com.example.demo.web包下的WebConfig类,用于扫描组件
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureComponentScan(ComponentScan annotationConfig) {
annotationConfig.scan("com.example.demo.component");
}
}
```
在实际应用中,确保每个类所在的包名符合项目结构,并且Spring的配置如XML或注解(如@Component、@Service等)已经启用。
阅读全文