简介
之前在调试的过程中一步一步的找到了代理对象创建的位置,现在就来看一下具体是如何创建的
源码分析
1 | // Create proxy if we have advice. |
获取advisor
Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null);
AbstractAdvisorAutoProxyCreator中的getAdvicesAndAdvisorsForBean
1 | protected Object[] getAdvicesAndAdvisorsForBean(Class<?> beanClass, String beanName, TargetSource targetSource) { |
findEligibleAdvisors(beanClass, beanName);
1 | protected List<Advisor> findEligibleAdvisors(Class<?> beanClass, String beanName) { |
创建代理对象createProxy
1 | protected Object createProxy(Class<?> beanClass, @Nullable String beanName, |
proxyFactory.getProxy(getProxyClassLoader());
1 | public Object getProxy(@Nullable ClassLoader classLoader) { |
获取代理createAopProxy(主要是判断生成jdk代理对象还是cglib代理对象)
1 | public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { |
cglib代理生成代理对象
1 | public Object getProxy(@Nullable ClassLoader classLoader) { |
1 | protected Object createProxyClassAndInstance(Enhancer enhancer, Callback[] callbacks) { |
到此,代理类就被创建出来了。