A CDI bean is an application component that encapsulates some business logic. Beans can be used either by some Java code or by the unified EL (expression language used in JSP and JSF technologies). Beans' life cycles are managed by the container and can be injected into other beans. All you need to do to define a bean is to write a POJO and declare it to be a CDI bean. To declare that, there are two primary approaches:
Using annotations
Using the beans.xml file
Both ways should work; however, folks prefer using annotations over XML as it's handy and included in the actual coding context. So, why is XML just over there? Well, that's because annotations are relatively new in Java (released in Java 5). Until they were introduced, there was no other way in Java than XML to provide configuration information to your application server. And since then, it continued to be just another way, alongside the annotations approach.
Moreover, if both are used together, XML is going to override annotations. Some developers and application administrators tend to perform temporary changes or hot-fixes sometimes, by overriding some hard-coded programmatic configuration values, using external XML files. It worth mentioning that this approach is not a recommended way to actually deploy things into your production.
In all of the coming examples, we are going to use the annotations approach. However, in the Using interceptors section, a usage to the beans.xml file will be required and used in one example. Now, let's start our first example and define our first CDI bean: