Skip to content

Commit

Permalink
[debug] 使用二级缓存的方式解决了代理类之间的循环依赖问题
Browse files Browse the repository at this point in the history
  • Loading branch information
vfdxvffd committed Apr 15, 2021
1 parent e29f7be commit 728c741
Show file tree
Hide file tree
Showing 2 changed files with 328 additions and 544 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.vfd.summer.applicationContext;

import com.vfd.summer.ioc.exception.DataConversionException;
import com.vfd.summer.ioc.exception.DuplicateBeanClassException;
import com.vfd.summer.ioc.exception.DuplicateBeanNameException;
import com.vfd.summer.ioc.exception.NoSuchBeanException;


import com.vfd.summer.exception.DataConversionException;
import com.vfd.summer.exception.DuplicateBeanClassException;
import com.vfd.summer.exception.DuplicateBeanNameException;
import com.vfd.summer.exception.NoSuchBeanException;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
* @PackageName: com.vfd.summer.ioc.applicationContext
Expand All @@ -14,7 +19,70 @@
*/
public interface ApplicationContext {

Object getBean(String beanName) throws NoSuchBeanException, DataConversionException, DuplicateBeanClassException, DuplicateBeanNameException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException;
/**
* 根据bean的name获取对象
* @param beanName
* @return
*/
Object getBean(String beanName) throws NoSuchBeanException, DataConversionException, DuplicateBeanClassException, DuplicateBeanNameException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, InstantiationException;

/**
* 根据bean的类型获取对象
* @param beanType
* @param <T>
* @return
*/
<T> T getBean(Class<T> beanType) throws NoSuchBeanException, DataConversionException, DuplicateBeanClassException, DuplicateBeanNameException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, InstantiationException;

/**
* 同时根据bean的类型和name获取对象,若一个接口多个实现类,则可以通过接口类型和name去获取
* @param name
* @param beanType
* @param <T>
* @return
*/
<T> T getBean(String name, Class<T> beanType) throws NoSuchBeanException, NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InstantiationException, DuplicateBeanNameException, DuplicateBeanClassException, InvocationTargetException, DataConversionException, NoSuchBeanException;

/**
* 根据name获取相应的类型
* @param name
* @return
*/
Class<?> getType(String name) throws NoSuchBeanException;

/**
* 根据类型获取该类型对应的所有bean,比如一个接口和它的所有实现类,用map返回<beanName, Object>
* @param beanType
* @param <T>
* @return
*/
<T> Map<String, T> getBeansOfType(Class<T> beanType) throws NoSuchBeanException, InstantiationException, InvocationTargetException, NoSuchMethodException, IllegalAccessException, DuplicateBeanNameException, DataConversionException, DuplicateBeanClassException, ClassNotFoundException;

/**
* 获取BeanDefinition的数量,即ioc中管理的所有类的数量
* @return
*/
int getBeanDefinitionCount();

/**
* 获取所有BeanDefinition的name属性
* @return
*/
String[] getBeanDefinitionNames();

/**
* 判断是否存在name为传入参数的bean
* @param name
* @return
*/
boolean containsBean(String name);

<T> T getBean(Class<T> beanType) throws NoSuchBeanException, DataConversionException, DuplicateBeanClassException, DuplicateBeanNameException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException;
/**
* 判断是否存在name为传入参数的BeanDefinition
* 与上一个方法不同的是上一个判断的是实际的对象,而这个方法判断的是BeanDefinition
* 若某个类为原型模式(非单例),则它的对象不会存储在ioc容器中,但BeanDefinition是一直存在的
* @param beanName
* @return
*/
boolean containsBeanDefinition(String beanName);
}
Loading

0 comments on commit 728c741

Please sign in to comment.