可以使用@Component
、@Autowired
和@Configuration
等注解组合来实现依赖注入和Bean的配置。以下是使用全部注解方式实现的代码示例:
首先,假设有一个接口 MessageService
和其实现类 EmailService
,如下所示:
public interface MessageService {
void sendMessage(String message);
}
@Component
public class EmailService implements MessageService {
public void sendMessage(String message) {
System.out.println("Sending email: " + message);
}
}
在上述示例中,我们在 EmailService
类上使用了 @Component
注解,表示将该类作为一个组件(Bean)进行管理。
接下来,假设有一个需要依赖 MessageService
的类 NotificationService
,代码示例如下:
@Component
public class NotificationService {
private MessageService messageService;
@Autowired
public NotificationService(MessageService messageService) {
this.messageService = messageService;
}
public void sendNotification(String message) {
messageService.sendMessage(message);
}
}
在上述示例中,我们使用了 @Component
注解将 NotificationService
类标记为一个组件(Bean)。同时,在构造函数上使用了 @Autowired
注解,表示该构造函数需要进行自动注入依赖项。
接下来,我们需要使用 @Configuration
注解创建一个配置类,并在该类中声明Bean的配置。示例如下:
@Configuration
public class AppConfig {
@Bean
public MessageService messageService() {
return new EmailService();
}
@Bean
public NotificationService notificationService(MessageService messageService) {
return new NotificationService(messageService);
}
}
在上述示例中,我们使用 @Configuration
注解标记 AppConfig
类为配置类。在该类中,我们使用 @Bean
注解来声明Bean的配置。messageService()
方法用于配置 MessageService
Bean,返回一个 EmailService
实例。notificationService(MessageService messageService)
方法用于配置 NotificationService
Bean,接收一个 MessageService
参数,并返回一个以该参数为依赖项的 NotificationService
实例。
最后,我们可以通过创建一个Spring应用程序上下文,并获取相应的Bean来验证依赖注入是否成功。示例如下:
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
NotificationService notificationService = context.getBean(NotificationService.class);
notificationService.sendNotification("Hello, world!");
}
}
在上述示例中,我们使用 AnnotationConfigApplicationContext
创建一个基于注解的应用程序上下文,并通过 getBean()
方法获取 NotificationService
的Bean。然后,我们可以调用其方法来发送通知。