Question: I am a little bit confused, we call CDI bean to the beans which we inject them using `@Inject` annotation or the beans which we use `@Inject` inside them ?

Answer: 
CDI **does not introduce** a new bean type called a *CDI Bean* with its
own unique component model.

CDI **provides a set** of services that can be *consumed by managed beans and EJBs* that are defined by their existing component models.

So, **CDI is just a Bean** (EJB or Managed Bean) handling CDI lifecycle with scope for *Context* and other old feature *DI* .
I think the term `CDI bean` might not be technically correct. **Managed bean** seems more appropriate.

Though, a possible definition of **CDI bean** could be: Any **managed bean** that was **created and injected as a result of the presence of CDI annotations** on a class or as a result of the prensence of `beans.xml` file inside the archive. A CDI bean itself is not a class but a managed instance of a class.

e.g. take the example below:

```java
public class Logger{}
public class Producer {

    @Produces
    public Logger getLogger() {
        return new Logger();
    }
}

```

`Logger` itself is just a class. It becomes a `managed bean` (`CDI bean`) after it is instantiated by the producer and is bound to a context.

CDI beans can only exist inside a container. The **container** needs to implement the `CDI` specification. It scans part or all of the classpath for CDI annotations based on which it **creates and manages the corresponding beans.** 
Creating a CDI-enabled container from a standalone application is as easy as this:

```
WeldContainer container = new Weld().initialize();

```