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 beans** are classes that CDI can instantiate, manage, and inject
>  automatically to satisfy the dependencies of other objects. Almost any
>  Java class can be managed and injected by CDI.
> 
> 
> 

For example, PrintServlet got dependency on a Message instance and have it injected automatically by the CDI runtime.

PrintServlet.java

```
@WebServlet("/printservlet")
public class PrintServlet extends HttpServlet {
    @Inject private Message message;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().print(message.get());
    }
}

```

Message.java (**This class is a CDI bean**)

```
@RequestScoped
public class Message {
    @Override
    public String get() {
        return "Hello World!";
    }
}

```

Cheers!
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();

```