An initializer has several other attributes except name: context, block, etc. So whenever an engine inherited from Rails::Engine, all of Rails::Engine's initializers are added to the child engine with a different context. That is, although there are duplicate initializers in Rails::Application with the same name, they are indeed differernt initializers which will run under different context:
def run(*args)
@context.instance_exec(*args, &block)
end