Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meaning of @Resource annotation

I'm unable to understand the meaning of the @Resource annotation. I've looked at online resources, but they seem to explain the same in a way which is difficult to comprehend. Can someone please explain the meaning of @Resource in a simplistic manner, if possible?

Thanks !

like image 804
LM10 Avatar asked May 18 '18 21:05

LM10


People also ask

What is @resource annotation in Java?

Resource annotation is used to declare a reference to a resource; @Resource can decorate a class, a field, or a method.

What is the use of @resource annotation in Spring?

We can resolve dependencies by field injection by annotating an instance variable with the @Resource annotation. This configuration will resolve dependencies using the match-by-name execution path. We must define the bean namedFile in the ApplicationContextTestResourceNameType application context.

What is @resource in Spring boot?

interface: URLResource: Represents a resource loaded from a URL. ClassPathResource: Represents a resource loaded from the classpath. FileSystemResource: Represents a resource loaded from the filesystem. ServletContextResource: This implementation is for.

What is difference between @resource and @autowired?

@Resource: annotation based on JSR-250. @Resource is quite similar to @Autowired and @Inject, but the main difference is the execution paths taken to find out the required bean to inject. @Resource will narrow down the search first by name then by type and finally by Qualifiers (ignored if match is found by name).


1 Answers

First of all, to understand the point of @Resource you need to understand the Inversion of Control (IoC).

Inversion of Control is a principle in software development which goes that the control of objects should be transferred to a container or a framework.

Dependency Injection (DI) is a pattern of IoC implementation, where the control being inverted is the setting of object’s dependencies. The act of composing objects with other objects (injecting) is done by a container rather than by the objects themselves.

Using a DI framework (like Spring IoC or EJB) you're creating your POJOs and configuring the framework (a POJO configured such way called a Bean). A Bean may have different scopes, like singleton (1 object instance per container), prototype (creates a new instance of an object per injection or explicit call) and etc.

enter image description here

So far, so good. What's next? It's time to use our beans.

@Resource is the annotation that will help to extract beans from the container.

There are several lookup options to extract beans:

  • Match by Name
  • Match by Type
  • Match by Qualifier

Using @Resource without any parameters will trigger Match by Type lookup type.

There is an example of usage or @Resource with field injection and Spring framework with Java-based configuration and Match by Name:

@Configuration
public class ApplicationContext {
 
    // Put the bean into the spring container
    @Bean(name = "userFile")
    public File userFile() {
        File file = new File("user.txt");
        return file;
    }
}

@Service
class UserService {

    // Ask the container to get the bean and 'put' it here (inject)
    @Resource(name = "userFile")
    private File userFile;

}

@Resource is usually used to inject data sources, singleton services, context configurations and etc.

like image 109
J-Alex Avatar answered Oct 17 '22 14:10

J-Alex