wordpress wp_ajax_,广西关键词优化公司,wordpress 显示一篇文章,wordpress主题的使用教程1 依赖注入的模式和类型 模式 类型 2 自动绑定#xff08;Autowiring#xff09;
官方定义
“自动装配是Spring框架中一种机制#xff0c;用于自动解析和满足bean之间的依赖关系。通过自动装配#xff0c;Spring容器可以根据类型、名称或其他属性来自动连接协作的beanAutowiring
官方定义
“自动装配是Spring框架中一种机制用于自动解析和满足bean之间的依赖关系。通过自动装配Spring容器可以根据类型、名称或其他属性来自动连接协作的bean而无需显式配置依赖关系。这使得开发者可以更加专注于业务逻辑而不必过多关注bean之间的连接与注入。” 优点
自动装配简化了应用程序的配置工作提高了开发效率和代码的可读性同时提供了灵活性和扩展性使得应用程序更易于维护和演化。 3 自动绑定Autowiring模式 4自动绑定的不足
虽然自动绑定Autowiring在某些情况下可以提供便利但也有几个原因导致不建议过度使用或完全依赖自动绑定
自动绑定使得依赖关系变得隐式缺乏明确的配置。.autowiring不具有精确性它是一种猜测性的东西然而Spring非常在乎精确性 Autowiring很难在工具方面进行呈现很难确定你这个autowiring的bean在上下文是否存在 。如果存在多个定义的bean会报错系统不知道你需要的是哪个bean这可能导致代码可读性和可维护性下降特别是在复杂的应用程序中。 动绑定可能导致组件之间的耦合增加影响模块化开发和重复使用。当组件之间的依赖关系不明确时重构和替换组件可能变得困难。 5 Setter 方法注入 例如 6 构造器 注入 例如 public class UserService {private UserDao userDao;// 构造器public UserService(UserDao userDao) {this.userDao userDao;}// 其他业务方法...6 字段注入 7 方法注入 8 接口回调注入 8 依赖注入类型选择 9 限定注入 10 延迟依赖注入
通常的 Autowired 会及时依赖相关的 Spring Bean不过此时 Bean 的状态并未完全准备好所以 ObjectProvider 可以在需要时获取 Spring Bean更好的状态准备达到延迟的获取效果。 11 依赖注入的过程和规则 在 AbstractApplicationContext#refresh#finishBeanFactoryInitialization 方法中初始化所有还未初始化的 Bean不是抽象、单例模式、不是懒加载方式 通过 DefaultListableBeanFactory#preInstantiateSingletons 方法进行初始化会通过 AbstractBeanFactory#getBean(beanName) 方法对每个 Bean 进行初始化 Bean 初始化的过程比较繁琐大致过程如下
1. 先找到对应的 BeanDefinition 对象然后会走到 AbstractAutowireCapableBeanFactory#createBean 方法**进行实例化**、**填充属性值**、调用 Bean 的**初始化方法**
2. 在填充属性值的过程默认根据类型进行注入那么在 AbstractAutowireCapableBeanFactory#autowireByType 的方法中会调用 DefaultListableBeanFactory#resolveDependency 方法进行注入最后还是会通过 AbstractBeanFactory#getBean(beanName) 方法获取到需要注入的 Bean 对象
3. 在填充属性值的时候也会通过 AutowiredAnnotationBeanPostProcessor 注入属性值该注入增强器会对 Autowired 或者 Value 注解标注的属性进行注入也是通过 DefaultListableBeanFactory#resolveDependency 方法进行注入。具体过程可看 AutowiredAnnotationBeanPostProcessor 的私有内部类 AutowiredFieldElement#inject 方法 12 Autowired 注入
1.在doCreateBean中会先调用applyMergedBeanDefinitionPostProcessors后执行populateBean 所以会先调用postProcessMergedBeanDefinition后执行InstantiationAwareBeanPostProcessor的postProcessProperties。之后就是要创建Bean创建bean肯定要看看有没有配置什么字段需要注入-findAutowiringMetadata()
2.postProcessProperties中有两个步骤
1findAutowiringMetadata查找注入元数据没有缓存就创建具体是上一节内容。最终会返回InjectionMetadata里面包括待注入的InjectedElement信息field、method等等
2执行InjectionMetadata的inject方法具体为AutowiredFieldElement和AutowiredMethodElement的Inject方法
2.1AutowiredFieldElement inject具体流程
2.1.1DependencyDescriptor的创建
2.1.2调用beanFactory的resolveDependency获取带注入的bean
2.1.2.1resolveDependency根据具体类型返回候选bean的集合或primary 的bean
2.1.3利用反射设置field
13TODO 面试题
依赖注入有几种方式
构造器注入
Setter 注入
字段注入
方法注入
接口回调注入