AOP是一种编程范式,它允许开发人员将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,例如日志记录、性能监控、事务管理等。在Spring Boot中,AOP通过切面(Aspect)和通知(Advice)实现。
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.demo.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
@AfterReturning(pointcut = "execution(* com.example.demo.service.*.*(..))", returning = "result")
public void logAfterReturning(JoinPoint joinPoint, Object result) {
System.out.println("After returning from method: " + joinPoint.getSignature().getName() + ", result: " + result);
}
}
在上面的示例中,创建了一个切面LoggingAspect,它包含了两个通知方法:logBefore和logAfterReturning。logBefore方法在目标方法执行前被调用,logAfterReturning方法在目标方法执行后被调用。
DI是一种通过外部注入依赖对象的方式来管理组件之间的依赖关系的技术。在Spring Boot中,DI通过容器管理Bean之间的依赖关系。
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
}
在上面的示例中,UserService依赖于UserRepository,通过构造函数注入依赖对象userRepository。
IOC是一种设计模式,它将应用程序的控制权从应用程序代码中转移到容器或框架中,由容器来负责创建对象并管理对象之间的依赖关系。在Spring Boot中,IOC容器负责管理Bean的生命周期和依赖注入。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在上面的示例中,@SpringBootApplication注解标注的类是Spring Boot应用程序的入口类,Spring Boot框架会自动扫描并管理这个类及其依赖的Bean。