当使用`@Bean`和`@Autowired`注解时,`@Bean`用于在Spring容器中注册一个bean,而`@Autowired`用于自动装配依赖关系。下面是一个实战案例,展示如何使用这两个注解进行类的注入。
假设我们有一个简单的订单管理系统,包含`Order`和`Customer`两个类。`Order`类表示订单,而`Customer`类表示顾客。每个订单都与一个顾客关联。我们将使用`@Bean`和`@Autowired`注解来实现`Order`类中对`Customer`类的依赖注入。
首先,我们定义`Customer`类:
```java
public class Customer {
private String name;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
```
然后,我们定义`Order`类,并在其中使用`@Autowired`注解将`Customer`类注入到`Order`类中:
```java
public class Order {
private int orderId;
private String product;
private Customer customer;
public Order(int orderId, String product) {
this.orderId = orderId;
this.product = product;
}
@Autowired
public void setCustomer(Customer customer) {
this.customer = customer;
}
public void displayOrderInfo() {
System.out.println("Order ID: " + orderId);
System.out.println("Product: " + product);
System.out.println("Customer: " + customer.getName());
}
}
```
接下来,在Spring配置文件中使用`@Bean`注解将`Customer`和`Order`类注册到Spring容器中:
```java
@Configuration
public class AppConfig {
@Bean
public Customer customer() {
return new Customer("John Doe");
}
@Bean
public Order order() {
return new Order(1, "ABC Product");
}
}
```
最后,在应用程序的入口类中,使用`AnnotationConfigApplicationContext`将配置类加载到Spring容器中,并获取`Order`对象并调用其方法:
```java
public class MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Order order = context.getBean(Order.class);
order.displayOrderInfo();
context.close();
}
}
```
在上述案例中,`Customer`类被注入到了`Order`类中。当调用`order.displayOrderInfo()`方法时,将会打印出订单的相关信息,包括顾客的姓名。
通过使用`@Bean`和`@Autowired`注解,我们成功实现了类的注入。Spring容器会自动解析依赖关系并将相应的bean注入到需要它们的类中。