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 !
Resource annotation is used to declare a reference to a resource; @Resource can decorate a class, a field, or a method.
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.
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.
@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).
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.
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:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With