Spring中Bean的实例化详细流程

还是举个例子,我有一个朋友小汪他远赴南方某城市打工。然后安定下来后他的朋友很想来家里玩,但是呢我这个朋友家里搞的很乱,所以他不好意思请朋友来家里玩。这时我的另一个朋友说那请一个保姆把家里好好整理一下就可以了,然后给他介绍了一个保姆大S(PS:本文无意指向任何人,因为Spring的前缀是S)然后就把家里整理得井井有条,就请朋友来家里玩了。

好了引入正文,很早很早的Java开发者应该熟悉,最早的时候我们前端访问后端都是需要自己写Servlet的,大概是一个接口写一个Servlet。Java开发又是面向对象的编程,我们程序里面写了new 了很多的对象。写了很多个Servlet,对象很难管理造成我们的程序很乱,都看不下去。后面Spring来了对象都交给了Spring管理,Servlet相关的也都交给了SpringMVC,这样我们开发就顺利多了。好了这下懂我上面举的例子了吧,懂得保姆是什么意思了吧【Spring就像一个管家,一个保姆】。所以多了解Spring相关知识我们提高开发效率有很大的帮助。既然我们的对象交给了Spring管理,那我们的对象怎么生成的呢,就让我们一起看下。

我们在使用Spring的时候,容器中的Bean在我们项目启动的时候都已经给我们生成了,直接使用就行了。容器启动的时候会调用这个方法:

AbstractApplicationContext.refresh()

然后就会调用下面这个方法:

// Instantiate all remaining (non-lazy-init) singletons.
 // 翻译一下就是 实例化所有非懒加载的Bean
finishBeanFactoryInitialization(beanFactory);

如图refresh中的方法,它再次调用的每个方法都很重要,实例化所有单例Bean的方法在这个方法的最后调用

我们写的对象基本都在这个方法内进行实例化。【PS方法只讲一些很重要的,具体的更详细方法调用我会在文章后面的流程图中展示出来。】

DefaultListableBeanFactory.preInstantiateSingletons()。
@Override
 public void preInstantiateSingletons() throws BeansException {

    // Iterate over a copy to allow for init methods which in turn register new bean definitions.
    // While this may not be part of the regular factory bootstrap, it does otherwise work fine.
    // 获取所有的要实例化的Bean的名称
    List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);
    // Trigger initialization of all non-lazy singleton beans...
    // 开始初始化单例的Bean
    for (String beanName : beanNames) {
      RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
       // Bean 不是抽象的,是单例的,不是懒加载的进入如下分支
      if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {
        // 如果是FactoryBean进入此分支。本次只聊自己开发写的非FactoryBean
        // 所以聊else下面的分支。
        if (isFactoryBean(beanName)) {
        // FactoryBean的名称很特别
          Object bean = getBean(FACTORY_BEAN_PREFIX + beanName);
          if (bean instanceof FactoryBean) {
            final FactoryBean<?> factory = (FactoryBean<?>) bean;
            boolean isEagerInit;
            if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {
              isEagerInit = AccessController.doPrivileged((PrivilegedAction<Boolean>)
                      ((SmartFactoryBean<?>) factory)::isEagerInit,
                  getAccessControlContext());
            }
            else {
              isEagerInit = (factory instanceof SmartFactoryBean &&
                  ((SmartFactoryBean<?>) factory).isEagerInit());
            }
            if (isEagerInit) {
              getBean(beanName);
            }
          }
        }
        else {
         // 非 FactoryBean进入此分支
          getBean(beanName);
        }
      }
    }
  }

然后会进入如下方法。

AbstractBeanFactory.doGetBean() 的方法。
protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType,
      @Nullable final Object[] args, boolean typeCheckOnly) throws BeansException {
    //  这个方法主要是获取Bean的名称,一些Bean的名称可能命名的比较特别
    // 需要进行转换。
    final String beanName = transformedBeanName(name);
    Object bean;
    // Eagerly check singleton cache for manually registered singletons.
    // 首先先从容器的缓存中获取Bean,如果容器中已经存在,直接返回。
    Object sharedInstance = getSingleton(beanName);
    if (sharedInstance != null && args == null) {
      bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
    } 
    else {
      // Fail if we're already creating this bean instance:
      // We're assumably within a circular reference.
      // 先检查这个Bean是否在创建中,如果在创建中抛出异常 
      if (isPrototypeCurrentlyInCreation(beanName)) {
        throw new BeanCurrentlyInCreationException(beanName);
      }
       // 标记Bean为正在创建中。
      if (!typeCheckOnly) {
        markBeanAsCreated(beanName);
      }
      try {
        // Create bean instance.
        //  如果Bean是单例开始创建Bean .
        //  后面判断还有Prototype(多例)不是要讲的重点,代码删除了。
        if (mbd.isSingleton()) {
        //  这个方法是Java 8的 lambda 写法,这个方法里面会把创建好的
        // Bean放到Spring容器中,后面再获取这个Bean直接从容器中获取了。
          sharedInstance = getSingleton(beanName, () -> {
            try {
            // 正式开始创建Bean 。
              return createBean(beanName, mbd, args);
            }
            catch (BeansException ex) {
            // 创建过程出现异常,销毁Bean
              destroySingleton(beanName);
              throw ex;
            }
          });
          bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
        }
    return (T) bean;
  }

然后是正式真正的创建Bean的方法如下:

AbstractAutowireCapableBeanFactory.createBean() 的方法。
@Override
  protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
      throws BeanCreationException {
    RootBeanDefinition mbdToUse = mbd;
    try {
     // doCreateBean 是Spring正在做事的方法。
      Object beanInstance = doCreateBean(beanName, mbdToUse, args);
  }
  protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
      throws BeanCreationException {
    // Instantiate the bean.
    //  实例化Bean 先创建一个BeanWrapper .这个方法里面Spring 一般为默认
    // 无参的构造方法创建对象,所以大家如果重写对象的构造方法的时候,一定
    // 要把无参构造方法也写出来。要不然某些情况下启动Spring容器可能会报错。
    if (instanceWrapper == null) {
      instanceWrapper = createBeanInstance(beanName, mbd, args);
    }
    // Initialize the bean instance.
    Object exposedObject = bean;
    try {
    // 为Bean的属性赋值。
      populateBean(beanName, mbd, instanceWrapper);
      // 初始化Bean 。
      exposedObject = initializeBean(beanName, exposedObject, mbd);
    }
    return exposedObject;
  }
  // 初始化Bean。
  protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) {
    // 如果你的Bean实现了Spring内置的Aware方法,会在这里执行
    invokeAwareMethods(beanName, bean);
    Object wrappedBean = bean;
    if (mbd == null || !mbd.isSynthetic()) {
    // 执行Bean的初始化前置处理器,很重要也就是Spring的钩子函数
      wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
    }
    try {
    // 执行Bean的初始化方法
      invokeInitMethods(beanName, wrappedBean, mbd);
    }
    if (mbd == null || !mbd.isSynthetic()) {
    // 执行Bean的后置处理器,也很重要。
    // 很多写底层架构的人都会对此钩子方法灵活应用
      wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
    }
    return wrappedBean;
  }

PS:下面是Bean实例化的详细的流程图,由于画好后的整个流程图无法完全保存,只有一张一张的截屏了。图片一张一张往下看就是整个完整的流程,自己可以找着图片一步一步看,就会对Bean的整个流程很清楚了。

读完熟悉了Spring实例化的流程你能做些什么呢?

1:比如实现BeanPostProcessor。A初始化前和后分别会执行下面2个方法。

@Component
public class A implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName);
        return null;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName);
        return null;
    }
}

2:实现InitializingBeanA初始化的时候会执行以下方法。

@Component
public class A implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("执行InitializingBean的afterPropertiesSet方法");
    }
}

上面实现的方法都会在A实例化的时候执行,

https://zhixing.bjtu.edu.cn/space-uid-421659.html
https://zhixing.bjtu.edu.cn/space-uid-421660.html
https://zhixing.bjtu.edu.cn/space-uid-421661.html
https://zhixing.bjtu.edu.cn/space-uid-421662.html
https://zhixing.bjtu.edu.cn/space-uid-421663.html
https://zhixing.bjtu.edu.cn/space-uid-421664.html
https://zhixing.bjtu.edu.cn/space-uid-421665.html
https://zhixing.bjtu.edu.cn/space-uid-421666.html
https://zhixing.bjtu.edu.cn/space-uid-421667.html
https://zhixing.bjtu.edu.cn/space-uid-421668.html
https://zhixing.bjtu.edu.cn/space-uid-421669.html
https://zhixing.bjtu.edu.cn/space-uid-421670.html
https://zhixing.bjtu.edu.cn/space-uid-421671.html
https://zhixing.bjtu.edu.cn/space-uid-421672.html
https://zhixing.bjtu.edu.cn/space-uid-421673.html
https://zhixing.bjtu.edu.cn/space-uid-421674.html
https://zhixing.bjtu.edu.cn/space-uid-421675.html
https://zhixing.bjtu.edu.cn/space-uid-421676.html
https://zhixing.bjtu.edu.cn/space-uid-421677.html
https://zhixing.bjtu.edu.cn/space-uid-421678.html
https://zhixing.bjtu.edu.cn/space-uid-421679.html
https://zhixing.bjtu.edu.cn/space-uid-421680.html
https://zhixing.bjtu.edu.cn/space-uid-421681.html
https://zhixing.bjtu.edu.cn/space-uid-421682.html
https://zhixing.bjtu.edu.cn/space-uid-421683.html
https://zhixing.bjtu.edu.cn/space-uid-421684.html
https://zhixing.bjtu.edu.cn/space-uid-421685.html
https://zhixing.bjtu.edu.cn/space-uid-421686.html
https://zhixing.bjtu.edu.cn/space-uid-421687.html
https://zhixing.bjtu.edu.cn/space-uid-421688.html
https://zhixing.bjtu.edu.cn/space-uid-421689.html
https://zhixing.bjtu.edu.cn/space-uid-421690.html
https://zhixing.bjtu.edu.cn/space-uid-421691.html
https://zhixing.bjtu.edu.cn/space-uid-421692.html
https://zhixing.bjtu.edu.cn/space-uid-421693.html
https://zhixing.bjtu.edu.cn/space-uid-421694.html
https://zhixing.bjtu.edu.cn/space-uid-421695.html
https://zhixing.bjtu.edu.cn/space-uid-421696.html
https://zhixing.bjtu.edu.cn/space-uid-421697.html
https://zhixing.bjtu.edu.cn/space-uid-421698.html
https://zhixing.bjtu.edu.cn/space-uid-421699.html
https://zhixing.bjtu.edu.cn/space-uid-421700.html
https://zhixing.bjtu.edu.cn/space-uid-421701.html
https://zhixing.bjtu.edu.cn/space-uid-421702.html
https://zhixing.bjtu.edu.cn/space-uid-421703.html
https://zhixing.bjtu.edu.cn/space-uid-421704.html
https://zhixing.bjtu.edu.cn/space-uid-421705.html
https://zhixing.bjtu.edu.cn/space-uid-421706.html
https://zhixing.bjtu.edu.cn/space-uid-421707.html
https://zhixing.bjtu.edu.cn/space-uid-421708.html
https://zhixing.bjtu.edu.cn/space-uid-421709.html
https://zhixing.bjtu.edu.cn/space-uid-421710.html
https://zhixing.bjtu.edu.cn/space-uid-421711.html
https://zhixing.bjtu.edu.cn/space-uid-421712.html
https://zhixing.bjtu.edu.cn/space-uid-421713.html
https://zhixing.bjtu.edu.cn/space-uid-421714.html
https://zhixing.bjtu.edu.cn/space-uid-421715.html
https://zhixing.bjtu.edu.cn/space-uid-421716.html
https://zhixing.bjtu.edu.cn/space-uid-421717.html
https://zhixing.bjtu.edu.cn/space-uid-421718.html
https://zhixing.bjtu.edu.cn/space-uid-421719.html
https://zhixing.bjtu.edu.cn/space-uid-421720.html
https://zhixing.bjtu.edu.cn/space-uid-421721.html
https://zhixing.bjtu.edu.cn/space-uid-421722.html
https://zhixing.bjtu.edu.cn/space-uid-421723.html
https://zhixing.bjtu.edu.cn/space-uid-421724.html
https://zhixing.bjtu.edu.cn/space-uid-421725.html
https://zhixing.bjtu.edu.cn/space-uid-421726.html
https://zhixing.bjtu.edu.cn/space-uid-421727.html
https://zhixing.bjtu.edu.cn/space-uid-421728.html
https://zhixing.bjtu.edu.cn/space-uid-421729.html
https://zhixing.bjtu.edu.cn/space-uid-421730.html
https://zhixing.bjtu.edu.cn/space-uid-421731.html
https://zhixing.bjtu.edu.cn/space-uid-421732.html
https://zhixing.bjtu.edu.cn/space-uid-421733.html
https://zhixing.bjtu.edu.cn/space-uid-421734.html
https://zhixing.bjtu.edu.cn/space-uid-421735.html
https://zhixing.bjtu.edu.cn/space-uid-421736.html
https://zhixing.bjtu.edu.cn/space-uid-421737.html
https://zhixing.bjtu.edu.cn/space-uid-421738.html
https://zhixing.bjtu.edu.cn/space-uid-421739.html
https://zhixing.bjtu.edu.cn/space-uid-421740.html
https://zhixing.bjtu.edu.cn/space-uid-421741.html
https://zhixing.bjtu.edu.cn/space-uid-421742.html
https://zhixing.bjtu.edu.cn/space-uid-421743.html
https://zhixing.bjtu.edu.cn/space-uid-421744.html
https://zhixing.bjtu.edu.cn/space-uid-421745.html
https://zhixing.bjtu.edu.cn/space-uid-421746.html
https://zhixing.bjtu.edu.cn/space-uid-421747.html
https://zhixing.bjtu.edu.cn/space-uid-421748.html
https://zhixing.bjtu.edu.cn/space-uid-421749.html
https://zhixing.bjtu.edu.cn/space-uid-421750.html
https://zhixing.bjtu.edu.cn/space-uid-421751.html
https://zhixing.bjtu.edu.cn/space-uid-421752.html
https://zhixing.bjtu.edu.cn/space-uid-421753.html
https://zhixing.bjtu.edu.cn/space-uid-421754.html
https://zhixing.bjtu.edu.cn/space-uid-421755.html
https://zhixing.bjtu.edu.cn/space-uid-421756.html
https://zhixing.bjtu.edu.cn/space-uid-421757.html
https://zhixing.bjtu.edu.cn/space-uid-421758.html
https://zhixing.bjtu.edu.cn/space-uid-421759.html
https://zhixing.bjtu.edu.cn/space-uid-421760.html
https://zhixing.bjtu.edu.cn/space-uid-421761.html
https://zhixing.bjtu.edu.cn/space-uid-421762.html
https://zhixing.bjtu.edu.cn/space-uid-421763.html
https://zhixing.bjtu.edu.cn/space-uid-421764.html
https://zhixing.bjtu.edu.cn/space-uid-421765.html
https://zhixing.bjtu.edu.cn/space-uid-421766.html
https://zhixing.bjtu.edu.cn/space-uid-421767.html
https://zhixing.bjtu.edu.cn/space-uid-421768.html
https://zhixing.bjtu.edu.cn/space-uid-421769.html
https://zhixing.bjtu.edu.cn/space-uid-421770.html
https://zhixing.bjtu.edu.cn/space-uid-421771.html
https://zhixing.bjtu.edu.cn/space-uid-421772.html
https://zhixing.bjtu.edu.cn/space-uid-421773.html
https://zhixing.bjtu.edu.cn/space-uid-421774.html
https://zhixing.bjtu.edu.cn/space-uid-421775.html
https://zhixing.bjtu.edu.cn/space-uid-421776.html
https://zhixing.bjtu.edu.cn/space-uid-421777.html
https://zhixing.bjtu.edu.cn/space-uid-421778.html
https://zhixing.bjtu.edu.cn/space-uid-421779.html
https://zhixing.bjtu.edu.cn/space-uid-421780.html
https://zhixing.bjtu.edu.cn/space-uid-421781.html
https://zhixing.bjtu.edu.cn/space-uid-421782.html
https://zhixing.bjtu.edu.cn/space-uid-421783.html
https://zhixing.bjtu.edu.cn/space-uid-421784.html
https://zhixing.bjtu.edu.cn/space-uid-421785.html
https://zhixing.bjtu.edu.cn/space-uid-421786.html
https://zhixing.bjtu.edu.cn/space-uid-421787.html
https://zhixing.bjtu.edu.cn/space-uid-421788.html
https://zhixing.bjtu.edu.cn/space-uid-421789.html
https://zhixing.bjtu.edu.cn/space-uid-421790.html
https://zhixing.bjtu.edu.cn/space-uid-421791.html
https://zhixing.bjtu.edu.cn/space-uid-421792.html
https://zhixing.bjtu.edu.cn/space-uid-421793.html
https://zhixing.bjtu.edu.cn/space-uid-421794.html
https://zhixing.bjtu.edu.cn/space-uid-421795.html
https://zhixing.bjtu.edu.cn/space-uid-421796.html
https://zhixing.bjtu.edu.cn/space-uid-421797.html
https://zhixing.bjtu.edu.cn/space-uid-421798.html
https://zhixing.bjtu.edu.cn/space-uid-421799.html
https://zhixing.bjtu.edu.cn/space-uid-421800.html
https://zhixing.bjtu.edu.cn/space-uid-421801.html
https://zhixing.bjtu.edu.cn/space-uid-421802.html
https://zhixing.bjtu.edu.cn/space-uid-421803.html
https://zhixing.bjtu.edu.cn/space-uid-421804.html
https://zhixing.bjtu.edu.cn/space-uid-421805.html
https://zhixing.bjtu.edu.cn/space-uid-421806.html
https://zhixing.bjtu.edu.cn/space-uid-421807.html
https://zhixing.bjtu.edu.cn/space-uid-421808.html
https://zhixing.bjtu.edu.cn/space-uid-421809.html
https://zhixing.bjtu.edu.cn/space-uid-421810.html
https://zhixing.bjtu.edu.cn/space-uid-421811.html
https://zhixing.bjtu.edu.cn/space-uid-421812.html
https://zhixing.bjtu.edu.cn/space-uid-421813.html
https://zhixing.bjtu.edu.cn/space-uid-421814.html
https://zhixing.bjtu.edu.cn/space-uid-421815.html
https://zhixing.bjtu.edu.cn/space-uid-421816.html
https://zhixing.bjtu.edu.cn/space-uid-421817.html
https://zhixing.bjtu.edu.cn/space-uid-421818.html
https://zhixing.bjtu.edu.cn/space-uid-421819.html
https://zhixing.bjtu.edu.cn/space-uid-421820.html
https://zhixing.bjtu.edu.cn/space-uid-421821.html
https://zhixing.bjtu.edu.cn/space-uid-421822.html
https://zhixing.bjtu.edu.cn/space-uid-421823.html
https://zhixing.bjtu.edu.cn/space-uid-421824.html
https://zhixing.bjtu.edu.cn/space-uid-421825.html
https://zhixing.bjtu.edu.cn/space-uid-421826.html
https://zhixing.bjtu.edu.cn/space-uid-421827.html
https://zhixing.bjtu.edu.cn/space-uid-421828.html
https://zhixing.bjtu.edu.cn/space-uid-421829.html
https://zhixing.bjtu.edu.cn/space-uid-421830.html
https://zhixing.bjtu.edu.cn/space-uid-421831.html
https://zhixing.bjtu.edu.cn/space-uid-421832.html
https://zhixing.bjtu.edu.cn/space-uid-421833.html
https://zhixing.bjtu.edu.cn/space-uid-421834.html
https://zhixing.bjtu.edu.cn/space-uid-421835.html
https://zhixing.bjtu.edu.cn/space-uid-421836.html
https://zhixing.bjtu.edu.cn/space-uid-421837.html
https://zhixing.bjtu.edu.cn/space-uid-421838.html
https://zhixing.bjtu.edu.cn/space-uid-421839.html
https://zhixing.bjtu.edu.cn/space-uid-421840.html
https://zhixing.bjtu.edu.cn/space-uid-421841.html
https://zhixing.bjtu.edu.cn/space-uid-421842.html
https://zhixing.bjtu.edu.cn/space-uid-421843.html
https://zhixing.bjtu.edu.cn/space-uid-421844.html
https://zhixing.bjtu.edu.cn/space-uid-421845.html
https://zhixing.bjtu.edu.cn/space-uid-421846.html
https://zhixing.bjtu.edu.cn/space-uid-421847.html
https://zhixing.bjtu.edu.cn/space-uid-421848.html
https://zhixing.bjtu.edu.cn/space-uid-421849.html
https://zhixing.bjtu.edu.cn/space-uid-421850.html
https://zhixing.bjtu.edu.cn/space-uid-421851.html
https://zhixing.bjtu.edu.cn/space-uid-421852.html
https://zhixing.bjtu.edu.cn/space-uid-421853.html
https://zhixing.bjtu.edu.cn/space-uid-421854.html
https://zhixing.bjtu.edu.cn/space-uid-421855.html
https://zhixing.bjtu.edu.cn/space-uid-421856.html
https://zhixing.bjtu.edu.cn/space-uid-421857.html
https://zhixing.bjtu.edu.cn/space-uid-421858.html
https://zhixing.bjtu.edu.cn/space-uid-421859.html
https://zhixing.bjtu.edu.cn/space-uid-421860.html
https://zhixing.bjtu.edu.cn/space-uid-421861.html
https://zhixing.bjtu.edu.cn/space-uid-421862.html
https://zhixing.bjtu.edu.cn/space-uid-421863.html
https://zhixing.bjtu.edu.cn/space-uid-421864.html
https://zhixing.bjtu.edu.cn/space-uid-421865.html
https://zhixing.bjtu.edu.cn/space-uid-421866.html
https://zhixing.bjtu.edu.cn/space-uid-421867.html
https://zhixing.bjtu.edu.cn/space-uid-421868.html
https://zhixing.bjtu.edu.cn/space-uid-421869.html
https://zhixing.bjtu.edu.cn/space-uid-421870.html
https://zhixing.bjtu.edu.cn/space-uid-421871.html
https://zhixing.bjtu.edu.cn/space-uid-421872.html
https://zhixing.bjtu.edu.cn/space-uid-421873.html
https://zhixing.bjtu.edu.cn/space-uid-421874.html
https://zhixing.bjtu.edu.cn/space-uid-421875.html
https://zhixing.bjtu.edu.cn/space-uid-421876.html
https://zhixing.bjtu.edu.cn/space-uid-421877.html
https://zhixing.bjtu.edu.cn/space-uid-421878.html
https://zhixing.bjtu.edu.cn/space-uid-421879.html
https://zhixing.bjtu.edu.cn/space-uid-421880.html
https://zhixing.bjtu.edu.cn/space-uid-421881.html
https://zhixing.bjtu.edu.cn/space-uid-421882.html
https://zhixing.bjtu.edu.cn/space-uid-421883.html
https://zhixing.bjtu.edu.cn/space-uid-421884.html
https://zhixing.bjtu.edu.cn/space-uid-421885.html
https://zhixing.bjtu.edu.cn/space-uid-421886.html
https://zhixing.bjtu.edu.cn/space-uid-421887.html
https://zhixing.bjtu.edu.cn/space-uid-421888.html
https://zhixing.bjtu.edu.cn/space-uid-421889.html
https://zhixing.bjtu.edu.cn/space-uid-421890.html
https://zhixing.bjtu.edu.cn/space-uid-421891.html
https://zhixing.bjtu.edu.cn/space-uid-421892.html
https://zhixing.bjtu.edu.cn/space-uid-421893.html
https://zhixing.bjtu.edu.cn/space-uid-421894.html
https://zhixing.bjtu.edu.cn/space-uid-421895.html
https://zhixing.bjtu.edu.cn/space-uid-421896.html
https://zhixing.bjtu.edu.cn/space-uid-421897.html
https://zhixing.bjtu.edu.cn/space-uid-421898.html
https://zhixing.bjtu.edu.cn/space-uid-421899.html
https://zhixing.bjtu.edu.cn/space-uid-421900.html
https://zhixing.bjtu.edu.cn/space-uid-421901.html
https://zhixing.bjtu.edu.cn/space-uid-421902.html
https://zhixing.bjtu.edu.cn/space-uid-421903.html
https://zhixing.bjtu.edu.cn/space-uid-421904.html
https://zhixing.bjtu.edu.cn/space-uid-421905.html
https://zhixing.bjtu.edu.cn/space-uid-421906.html
https://zhixing.bjtu.edu.cn/space-uid-421907.html
https://zhixing.bjtu.edu.cn/space-uid-421908.html
https://zhixing.bjtu.edu.cn/space-uid-421909.html
https://zhixing.bjtu.edu.cn/space-uid-421910.html
https://zhixing.bjtu.edu.cn/space-uid-421911.html
https://zhixing.bjtu.edu.cn/space-uid-421912.html
https://zhixing.bjtu.edu.cn/space-uid-421913.html
https://zhixing.bjtu.edu.cn/space-uid-421914.html
https://zhixing.bjtu.edu.cn/space-uid-421915.html
https://zhixing.bjtu.edu.cn/space-uid-421916.html
https://zhixing.bjtu.edu.cn/space-uid-421917.html
https://zhixing.bjtu.edu.cn/space-uid-421918.html
https://zhixing.bjtu.edu.cn/space-uid-421919.html
https://zhixing.bjtu.edu.cn/space-uid-421920.html
https://zhixing.bjtu.edu.cn/space-uid-421921.html
https://zhixing.bjtu.edu.cn/space-uid-421922.html
https://zhixing.bjtu.edu.cn/space-uid-421923.html
https://zhixing.bjtu.edu.cn/space-uid-421924.html
https://zhixing.bjtu.edu.cn/space-uid-421925.html
https://zhixing.bjtu.edu.cn/space-uid-421926.html
https://zhixing.bjtu.edu.cn/space-uid-421927.html
https://zhixing.bjtu.edu.cn/space-uid-421928.html
https://zhixing.bjtu.edu.cn/space-uid-421929.html
https://zhixing.bjtu.edu.cn/space-uid-421930.html
https://zhixing.bjtu.edu.cn/space-uid-421931.html
https://zhixing.bjtu.edu.cn/space-uid-421932.html
https://zhixing.bjtu.edu.cn/space-uid-421933.html
https://zhixing.bjtu.edu.cn/space-uid-421934.html
https://zhixing.bjtu.edu.cn/space-uid-421935.html
https://zhixing.bjtu.edu.cn/space-uid-421936.html
https://zhixing.bjtu.edu.cn/space-uid-421937.html
https://zhixing.bjtu.edu.cn/space-uid-421938.html
https://zhixing.bjtu.edu.cn/space-uid-421939.html
https://zhixing.bjtu.edu.cn/space-uid-421940.html
https://zhixing.bjtu.edu.cn/space-uid-421941.html
https://zhixing.bjtu.edu.cn/space-uid-421942.html
https://zhixing.bjtu.edu.cn/space-uid-421943.html
https://zhixing.bjtu.edu.cn/space-uid-421944.html
https://zhixing.bjtu.edu.cn/space-uid-421945.html
https://zhixing.bjtu.edu.cn/space-uid-421946.html
https://zhixing.bjtu.edu.cn/space-uid-421947.html
https://zhixing.bjtu.edu.cn/space-uid-421948.html
https://zhixing.bjtu.edu.cn/space-uid-421949.html
https://zhixing.bjtu.edu.cn/space-uid-421950.html
https://zhixing.bjtu.edu.cn/space-uid-421951.html
https://zhixing.bjtu.edu.cn/space-uid-421952.html
https://zhixing.bjtu.edu.cn/space-uid-421953.html
https://zhixing.bjtu.edu.cn/space-uid-421954.html
https://zhixing.bjtu.edu.cn/space-uid-421955.html
https://zhixing.bjtu.edu.cn/space-uid-421956.html
https://zhixing.bjtu.edu.cn/space-uid-421957.html
https://zhixing.bjtu.edu.cn/space-uid-421958.html
https://zhixing.bjtu.edu.cn/space-uid-421959.html
https://zhixing.bjtu.edu.cn/space-uid-421960.html
https://zhixing.bjtu.edu.cn/space-uid-421961.html
https://zhixing.bjtu.edu.cn/space-uid-421962.html
https://zhixing.bjtu.edu.cn/space-uid-421963.html
https://zhixing.bjtu.edu.cn/space-uid-421964.html
https://zhixing.bjtu.edu.cn/space-uid-421965.html
https://zhixing.bjtu.edu.cn/space-uid-421966.html
https://zhixing.bjtu.edu.cn/space-uid-421967.html
https://zhixing.bjtu.edu.cn/space-uid-421968.html
https://zhixing.bjtu.edu.cn/space-uid-421969.html
https://zhixing.bjtu.edu.cn/space-uid-421970.html
https://zhixing.bjtu.edu.cn/space-uid-421971.html
https://zhixing.bjtu.edu.cn/space-uid-421972.html
https://zhixing.bjtu.edu.cn/space-uid-421973.html

如果你写的业务逻辑有需要在A实例化时候执行的就可以使用上面的方法完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值