Class: SmartIoC::BeanFactory

Inherits:
Object
  • Object
show all
Includes:
Args, Errors
Defined in:
lib/smart_ioc/bean_factory.rb

Overview

Instantiates beans according to their scopes

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Args

#check_arg, #check_arg_any, #not_nil

Constructor Details

#initialize(bean_definitions_storage, extra_package_contexts) ⇒ BeanFactory

Returns a new instance of BeanFactory.



10
11
12
13
14
15
16
17
18
# File 'lib/smart_ioc/bean_factory.rb', line 10

def initialize(bean_definitions_storage, extra_package_contexts)
  @bean_definitions_storage = bean_definitions_storage
  @extra_package_contexts   = extra_package_contexts
  @bean_file_loader         = SmartIoC::BeanFileLoader.new
  @singleton_scope          = SmartIoC::Scopes::Singleton.new
  @prototype_scope          = SmartIoC::Scopes::Prototype.new
  @thread_scope             = SmartIoC::Scopes::Request.new
  @semaphore                = Mutex.new
end

Instance Attribute Details

#bean_file_loaderObject (readonly)

Returns the value of attribute bean_file_loader.



8
9
10
# File 'lib/smart_ioc/bean_factory.rb', line 8

def bean_file_loader
  @bean_file_loader
end

Instance Method Details

#clear_scopesObject



20
21
22
# File 'lib/smart_ioc/bean_factory.rb', line 20

def clear_scopes
  all_scopes.each(&:clear)
end

#force_clear_scopesObject



24
25
26
# File 'lib/smart_ioc/bean_factory.rb', line 24

def force_clear_scopes
  all_scopes.each(&:force_clear)
end

#get_bean(bean_name, package: nil, context: nil) ⇒ Object

Get bean from the container by it’s name, package, context

Parameters:

  • bean_name (Symbol)

    bean name

  • package (Symbol) (defaults to: nil)

    package name

  • context (Symbol) (defaults to: nil)

    context

Returns:

  • bean instance

Raises:

  • (ArgumentError)

    if bean is not found

  • (ArgumentError)

    if ambiguous bean definition was found



35
36
37
38
39
40
41
42
43
# File 'lib/smart_ioc/bean_factory.rb', line 35

def get_bean(bean_name, package: nil, context: nil)
  check_arg(bean_name, :bean_name, Symbol)
  check_arg(package, :package, Symbol) if package
  check_arg(context, :context, Symbol) if context

  @semaphore.synchronize do
    result = get_or_build_bean(bean_name, package, context)
  end
end