# Setup

*Petite* uses annotation based configuration to make setup and configuration simple as possible. It doesn't depend on any external (XML) files; by default all configuration is done automagically, from Java. Nevertheless, it is easy to configure and extend *Petite* to match any requirements.

### Bean Iteration

At any time, all registered beans may be iterated. This is useful when some additional modification has to be performed on bean classes, after being registered. Method `beansIterator` iterates all beans - actually, it iterates all bean definitions! This means that beans may not be even initialized yet (there was no first lookup yet).

### Configuration

*Petite* container is quite configurable. Configuration is available via method `config()`.

#### defaultScope

Default scope for beans registration, when explicit scope is not specified. Default value: `SingletonScope.class`.

#### defaultWiringMode

Defines default wiring mode. Can be one of the following:

* `WiringMode.NONE` - no wiring,
* `WiringMode.STRICT` - throws an exception if injection failes

  (default),
* `WiringMode.OPTIONAL` - ignores unsuccessful injections
* `WiringMode.AUTOWIRE` - tries to wire all fields

Mode can be changed during runtime, although this is not recommended.

#### detectDuplicatedBeanNames

Flag for detecting duplicated bean names during registration (`false` by default). If set to `true`, *Petite* will throw an exception if bean with the same name already exists in the container.

#### resolveReferenceParameters

Flag for resolving parameter references (`true` by default). *Petite* parameters can define a value that contains value of other parameter. For example: `defineParameter("name", "${name2}");` will define parameter **name** with value equals to value of other parameter, **name2**.

#### useFullTypeNames

Defines what will be the default bean name, when no explicit name is provided. If set to `false` (default), uncapitalized simple type name will be used as bean name (for example, `app.service.SomeService` will be named as `someService`).

If set to `true`, then full bean type name will be used as bean name.

#### lookupReferences

Defines reference lookup order. When looking up for a bean reference, *Petite* may look for it in different ways. By default, the lookup order is the following:

* `PetiteReference.NAME`
* `PetiteReference.TYPE_SHORT_NAME`
* `PetiteReference.TYPE_FULL_NAME`

User may change or modify this lookup order.

#### useParamo

When set to `true` (default), *Petite* will use *Paramo* to extract constructor and method argument names - this information is not provided by java reflection API and must be read from debug information in bytecode. If set to `false`, injection by name will not be available for constructor and method arguments.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://petite.jodd.org/setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
