Class SimpleContainer

java.lang.Object
com.ultikits.ultitools.context.SimpleContainer

public class SimpleContainer extends Object
Simple dependency injection container to replace Spring ApplicationContext.
简单的依赖注入容器,用于替换Spring ApplicationContext。
  • Field Details

  • Constructor Details

    • SimpleContainer

      public SimpleContainer()
    • SimpleContainer

      public SimpleContainer(SimpleContainer parent)
  • Method Details

    • getSingleton

      protected Object getSingleton(String beanName, boolean allowEarlyReference)
      Get singleton from three-level cache. This method implements the circular dependency resolution through early singleton exposure.
      从三级缓存获取单例。此方法通过提前暴露单例来实现循环依赖解析。
      Parameters:
      beanName - bean name
      Bean名称
      allowEarlyReference - whether to allow early reference (level 2/3 cache)
      是否允许早期引用(二/三级缓存)
      Returns:
      singleton instance or null if not found
      单例实例,如果未找到则返回null
    • addSingletonFactory

      protected void addSingletonFactory(String beanName, Supplier<Object> singletonFactory)
      Add a singleton factory to level 3 cache for early reference support.
      向三级缓存添加单例工厂以支持早期引用。
      Parameters:
      beanName - bean name
      Bean名称
      singletonFactory - factory for creating early reference
      创建早期引用的工厂
    • addSingleton

      protected void addSingleton(String beanName, Object singletonObject)
      Add a fully initialized singleton to level 1 cache. Clears from level 2 and level 3 caches.
      向一级缓存添加完全初始化的单例。从二级和三级缓存清除。
      Parameters:
      beanName - bean name
      Bean名称
      singletonObject - fully initialized singleton
      完全初始化的单例
    • registerSingleton

      public void registerSingleton(String name, Object instance)
      Register a singleton instance.
      注册单例实例。
      Parameters:
      name - instance name
      实例名称
      instance - instance object
      实例对象
    • registerSupplier

      public void registerSupplier(String name, Supplier<Object> supplier)
      Register a supplier for lazy initialization.
      注册供应商用于延迟初始化。
      Parameters:
      name - supplier name
      供应商名称
      supplier - supplier function
      供应商函数
    • registerSupplier

      public void registerSupplier(String name, Supplier<Object> supplier, Class<?> type)
      Register a supplier for lazy initialization with type information.
      注册带类型信息的供应商用于延迟初始化。
      Parameters:
      name - supplier name
      供应商名称
      supplier - supplier function
      供应商函数
      type - the type of bean this supplier produces
      供应商生成的Bean类型
    • registerType

      public <T> void registerType(Class<T> type, T instance)
      Register a type mapping.
      注册类型映射。
      Parameters:
      type - class type
      类类型
      instance - instance object
      实例对象
    • registerTypeSupplier

      public <T> void registerTypeSupplier(Class<T> type, Supplier<T> supplier)
      Register a type supplier.
      注册类型供应商。
      Parameters:
      type - class type
      类类型
      supplier - supplier function
      供应商函数
    • getBean

      public Object getBean(String name)
      Get bean by name.
      通过名称获取Bean。
      Parameters:
      name - bean name
      Bean名称
      Returns:
      bean instance
      Bean实例
    • getBean

      public <T> T getBean(Class<T> type)
      Get bean by type.
      通过类型获取Bean。
      Parameters:
      type - bean type
      Bean类型
      Returns:
      bean instance
      Bean实例
    • getBean

      public <T> T getBean(String name, Class<T> type)
      Get bean by name and type.
      通过名称和类型获取Bean。
      Parameters:
      name - bean name
      Bean名称
      type - bean type
      Bean类型
      Returns:
      bean instance
      Bean实例
    • getBeanNamesForType

      public String[] getBeanNamesForType(Class<?> type)
      Get bean names for type.
      获取指定类型的Bean名称。
      Parameters:
      type - bean type
      Bean类型
      Returns:
      bean names
      Bean名称数组
    • getAutowireCapableBeanFactory

      public AutowireFactory getAutowireCapableBeanFactory()
      Get autowire capable bean factory.
      获取自动装配Bean工厂。
      Returns:
      autowire factory
      自动装配工厂
    • close

      public void close()
      Close the container.
      关闭容器。
    • containsBean

      public boolean containsBean(String name)
      Check if container contains bean.
      检查容器是否包含Bean。
      Parameters:
      name - bean name
      Bean名称
      Returns:
      true if contains
      如果包含则返回true
    • registerBean

      public <T> void registerBean(Class<T> type, Object... constructorArgs)
      Register bean with constructor arguments.
      使用构造器参数注册Bean。
      Parameters:
      type - bean type
      Bean类型
      constructorArgs - constructor arguments
      构造器参数
    • getBeanName

      private <T> String getBeanName(Class<T> type)
      Generate bean name for class.
      为类生成Bean名称。
    • refresh

      public void refresh()
      Refresh the container.
      刷新容器。
    • getSingletonValues

      public Collection<Object> getSingletonValues()
      Get all singleton bean instances registered in this container (not including parent).

      获取此容器中注册的所有单例 Bean 实例(不包含父容器)。

      Returns:
      unmodifiable collection of singleton beans
    • setDisplayName

      public void setDisplayName(String displayName)
      Set display name.
      设置显示名称。
      Parameters:
      displayName - display name
      显示名称
    • setId

      public void setId(String id)
      Set ID.
      设置ID。
      Parameters:
      id - container ID
      容器ID
    • setClassLoader

      public void setClassLoader(ClassLoader classLoader)
      Set class loader.
      设置类加载器。
      Parameters:
      classLoader - class loader
      类加载器
    • registerShutdownHook

      public void registerShutdownHook()
      Register shutdown hook.
      注册关闭钩子。
    • setParent

      public void setParent(SimpleContainer parent)
      Set parent container.
      设置父容器。
      Parameters:
      parent - parent container
      父容器
    • getBeanFactory

      public BeanFactory getBeanFactory()
      Get bean factory.
      获取Bean工厂。
      Returns:
      bean factory
      Bean工厂
    • getClassLoader

      public ClassLoader getClassLoader()
      Get class loader.
      获取类加载器。
      Returns:
      class loader
      类加载器
    • registerBeanDefinition

      public void registerBeanDefinition(String name, BeanDefinition definition)
      Register bean definition.
      注册Bean定义。
      Parameters:
      name - bean name
      Bean名称
      definition - bean definition
      Bean定义
    • createBean

      private Object createBean(String name, BeanDefinition definition)
      Create bean from definition. Uses three-level cache to support circular dependency resolution for setter injection.
      从定义创建Bean。使用三级缓存支持 setter 注入的循环依赖解析。
      Parameters:
      name - bean name
      Bean名称
      definition - bean definition
      Bean定义
      Returns:
      created bean
      创建的Bean
    • createBeanWithConstructorInjection

      private Object createBeanWithConstructorInjection(Class<?> beanClass)
      Create bean using constructor auto-wiring. Resolves constructor parameters from the container.
      使用构造器自动装配创建Bean。从容器中解析构造器参数。
      Parameters:
      beanClass - the class to instantiate
      要实例化的类
      Returns:
      new bean instance
      新的Bean实例
    • findMatchingConstructor

      private Constructor<?> findMatchingConstructor(Class<?> beanClass, Object[] args) throws NoSuchMethodException
      Find a matching constructor for the given arguments. Supports interface/superclass parameter types and primitive type boxing.
      为给定参数查找匹配的构造器。支持接口/父类参数类型和基本类型装箱。
      Parameters:
      beanClass - the class to find constructor for
      要查找构造器的类
      args - constructor arguments
      构造器参数
      Returns:
      matching constructor
      匹配的构造器
      Throws:
      NoSuchMethodException
    • isAssignable

      private boolean isAssignable(Class<?> paramType, Object value)
      Check if a value can be assigned to a parameter type. Handles primitive types, interfaces, and inheritance.
      检查值是否可以分配给参数类型。处理基本类型、接口和继承。
      Parameters:
      paramType - the parameter type
      参数类型
      value - the value to check
      要检查的值
      Returns:
      true if assignable
      如果可分配则返回true
    • isPrimitiveWrapperOf

      private boolean isPrimitiveWrapperOf(Class<?> primitive, Class<?> wrapper)
      Check if wrapper is the wrapper class for primitive type.
      检查wrapper是否是primitive类型的包装类。
    • invokePostConstructMethods

      private void invokePostConstructMethods(Object bean)
      Invoke methods annotated with @PostConstruct.
      调用带有@PostConstruct注解的方法。
      Parameters:
      bean - the bean instance
      Bean实例
    • invokePreDestroyMethods

      private void invokePreDestroyMethods(Object bean)
      Invoke methods annotated with @PreDestroy on a bean.
      调用Bean上带有@PreDestroy注解的方法。
      Parameters:
      bean - the bean instance
      Bean实例
    • addBeanPostProcessor

      public void addBeanPostProcessor(BeanPostProcessor processor)
      Add bean post processor.
      添加Bean后处理器。
      Parameters:
      processor - bean post processor
      Bean后处理器
    • getBeanDefinitionNames

      public String[] getBeanDefinitionNames()
      Get all bean names.
      获取所有Bean名称。
      Returns:
      bean names
      Bean名称数组
    • getBeansOfType

      public <T> Map<String,T> getBeansOfType(Class<T> type)
      Get beans of type.
      获取指定类型的Bean。
      Parameters:
      type - bean type
      Bean类型
      Returns:
      beans map
      Bean映射
    • getOrderedBeansOfType

      public <T> List<T> getOrderedBeansOfType(Class<T> type)
      Get beans of type ordered by @Service priority. Higher priority beans come first.
      按 @Service 优先级排序获取指定类型的Bean。 优先级高的Bean排在前面。
      Parameters:
      type - bean type
      Bean类型
      Returns:
      ordered list of beans
      排序后的Bean列表
    • getHighestPriorityBean

      public <T> T getHighestPriorityBean(Class<T> type)
      Get the highest priority bean of the given type.
      获取指定类型中优先级最高的Bean。
      Parameters:
      type - bean type
      Bean类型
      Returns:
      highest priority bean or null
      优先级最高的Bean或null
    • getServicePriority

      private int getServicePriority(Class<?> clazz)
      Get service priority from @Service annotation.
      从 @Service 注解获取服务优先级。
      Parameters:
      clazz - the class to check
      要检查的类
      Returns:
      priority value (default 0)
      优先级值(默认0)
    • isSingleton

      public boolean isSingleton(String name)
      Check if bean is singleton.
      检查Bean是否是单例。
      Parameters:
      name - bean name
      Bean名称
      Returns:
      true if singleton
      如果是单例则返回true
    • isPrototype

      public boolean isPrototype(String name)
      Check if bean is prototype.
      检查Bean是否是原型。
      Parameters:
      name - bean name
      Bean名称
      Returns:
      true if prototype
      如果是原型则返回true
    • getType

      public Class<?> getType(String name)
      Get bean type.
      获取Bean类型。
      Parameters:
      name - bean name
      Bean名称
      Returns:
      bean type
      Bean类型
    • preInstantiateSingletons

      public void preInstantiateSingletons()
      Initialize all singletons.
      初始化所有单例。
    • start

      public void start()
      Start the container.
      启动容器。
    • stop

      public void stop()
      Stop the container.
      停止容器。
    • isRunning

      public boolean isRunning()
      Check if container is running.
      检查容器是否正在运行。
      Returns:
      true if running
      如果正在运行则返回true
    • scanComponents

      public void scanComponents(String... basePackages)
      Scan components in packages.
      扫描包中的组件。
      Parameters:
      basePackages - packages to scan
      要扫描的包
    • processConfigurationClass

      public void processConfigurationClass(Class<?> configClass)
      Process configuration class.
      处理配置类。
      Parameters:
      configClass - configuration class
      配置类