Spring 的 IOC 是如何实现的呢?
Spring 的 IOC 是通过 工厂 + 反射 去实现的, 在 IOC 中,Spring 会将创建的 Bean 都放在工厂中,我们可以通过 @Configuration 来定义配置类,在配置类中通过 @Bean 来将 Bean 创建在 Bean 工厂中,在对 Bean 进行实例化时,使用的就是反射。
扩展:BeanFactory 和 ApplicationContext 这两个接口都是 Spring 提供用于实现 IOC 容器的接口,他们两个有什么区别呢?
Spring 的 aop 是如何实现的呢?
Spring 的 AOP 是通过动态代理实现的,如果对 Spring 的某个 Bean 配置了切面,那么 Spring 在创建这个 bean 的时候,其实创建的是这个 Bean 的代理对象,之后在调用这个 bean 的方法的时候,其实调用的是这个代理对象中重写的代理方法,Spring AOP 使用了 JDK 动态代理和 CGLIB 动态代理
如果需要代理的类实现了接口,Spring 就会使用 JDK 动态代理实现 AOP,如果没有实现接口,则 Spring 会使用 CGLIB 动态代理来实现 AOP