0%

spring | 注解 @component @Repository @Service @Controller

这个注解包含四种。

  • @Component
  • @Repository
  • @Service
  • @Controller

介绍


@Service, @Controller , @Repository = {@Component + 一些特定的功能}。这个就意味着这些注解在部分功能上是一样的。

注解 含义
@Component 最普通的组件,可以被注入到spring容器进行管理
@Repository 作用于持久层
@Service 作用于业务逻辑层
@Controller 作用于表现层(spring-mvc的注解)

如果你不知道要在项目的业务层采用@Service还是@Component注解。那么,@Service是一个更好的选择。

添加这些注解的作用是,被这些注解修饰的类就会被Spring扫描到并注入到Springbean容器中。

目前,我对容器的理解并不深,所以,在这里只是简单的说一下我的看法。在一般的 java 程序中,一个类我们可能会创建多个实例,实际上是很没有必要的,所以,有的时候,我们为了不创建那么多的实例,会使用单例设计模式。而 spring IOC「spring 容器」就是管理类实例的容器。其具体作用,体现在,使用上述的注解修饰的类,会被 spring 扫描,并且自动在容器中注入一个唯一实例,这样就不需要使用 new 来创建实例了。

当然,容器中的实例可以取出来,使用注解 @Autowired

和该四种注解相似的注解,还有 @Bean

有两个注解是不能被其他注解所互换的:

  • @Controller 注解的bean会被spring-mvc框架所使用。
  • @Repository 会被作为持久层操作(数据库)的bean来使用

如果想使用自定义的组件注解,那么只要在你定义的新注解中加上@Component即可:

1
2
3
@Component 
@Scope("prototype")
public @interface ScheduleJob {...}

这样,所有被@ScheduleJob注解的类就都可以注入到spring容器来进行管理。我们所需要做的,就是写一些新的代码来处理这个自定义注解(译者注:可以用反射的方法),进而执行我们想要执行的工作。

目前,这四种注解只是简单的说一下,日后会继续更新。

请我喝杯咖啡吧~