Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Creating a CDI Bean

Header Image

Ahoy there, me hearties! If ye be lookin’ to learn about creating a CDI bean, then ye’ve come to the right place. CDI stands for Contexts and Dependency Injection, and it’s a framework that allows for the easy creation and management of beans.

But what exactly is a CDI bean? In short, it’s a fancy name for a managed object in a CDI container. In more technical terms, a CDI bean is a Java object that is instantiated and managed by the CDI container. This means that the container is responsible for creating, initializing, and destroying the bean, as well as handling its dependencies.

CDI beans are different from regular Java objects because they are managed by the container, rather than being created and managed by the application itself. This allows for a more modular and extensible architecture, as well as making it easier to manage the lifecycle of objects in a large application.

Now that we’ve got the definition out of the way, let’s dive into how to create a CDI bean and how to use the @Named annotation to specify the name of the bean.

How to Create a CDI Bean

To create a CDI bean, you first need to define a Java class that will serve as the bean. This class should have a no-argument constructor and be annotated with the @javax.enterprise.context.ApplicationScoped annotation to indicate that it’s a CDI bean.

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MyBean {
  // class implementation
}

Once you’ve defined your CDI bean class, you can use the @Named annotation to specify the name of the bean. The name you choose will be used to refer to the bean throughout your application.

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named("myBeanName")
@ApplicationScoped
public class MyBean {
  // class implementation
}

In this example, we’ve added the @Named annotation with a value of “myBeanName”. This means that when we want to inject this bean into another class, we can refer to it by its name:

import javax.inject.Inject;

public class AnotherClass {
  @Inject
  private MyBean myBeanName;
  
  // class implementation
}

And that’s it! You’ve now created a CDI bean and given it a name. In the next section, we’ll cover how to inject dependencies into a CDI bean using the @Inject annotation.

Explanation of the @Named annotation

As we mentioned earlier, the @Named annotation is used to specify the name of a CDI bean. It’s a part of the Java EE API and is used in conjunction with the @javax.inject.Named annotation to define a name for the bean.

The @Named annotation has one required attribute, which is the name of the bean. This name can be any string value, as long as it’s unique within your application.

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named("myBeanName")
@ApplicationScoped
public class MyBean {
  // class implementation
}

In this example, we’ve used the @Named annotation to give our CDI bean the name “myBeanName”. This means that when we want to refer to this bean elsewhere in our application, we can use this name to inject it.

One important thing to note is that if you don’t use the @Named annotation to give your CDI bean a name, it will be automatically assigned a default name by the container. This name will be the unqualified class name of the bean, with the first letter converted to lowercase.

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class MyBean {
  // class implementation
}

In this example, our CDI bean will be automatically named “myBean”, since the class name is “MyBean”. However, it’s usually a good practice to give your beans more descriptive names, especially if you have multiple beans of the same type.

And with that, you now know how to create a CDI bean and give it a name using the @Named annotation. Stay tuned for the next sections on Dependency Injection, Managing the Lifecycle of a CDI Bean, Using CDI Qualifiers, Using CDI Events, Using CDI Interceptors, and Using CDI Producers. Happy coding, mateys!