简体   繁体   中英

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 !

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 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 an 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 annotaion 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.

The @Resource annotation is used to identify a class, field, or method that upon initialization, the resource will be injected. For a class-based @Resource, the "resource is looked up by the application at runtime".

Further information can be found here: https://docs.oracle.com/javaee/6/tutorial/doc/bncjk.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM