Spring MVC—— Annotation
1.1、@Controller

@Controller的定义如下:

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

	String value() default "";
}

从定义可以看出来,@Controller只能使用在类级别。并且有一个参数。 被@Controller修饰的类,在正确的配置下,可以被Spring MVC正确解析为一个Controller

1.2、@Service

@Service的定义如下:

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {

	String value() default "";
}

从定义可以看出来,@Service只能使用在类级别。并且有一个参数。 被@Service修饰的类,在正确的配置下,可以被Spring MVC正确解析为一个Service

1.3、@Repository

@Repository的定义如下:

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {

	String value() default "";
}

从定义可以看出来,@Repository只能使用在类级别。并且有一个参数。 被@Repository修饰的类,在正确的配置下,可以被Spring MVC正确解析为一个Repository

1.4、@Component

@Component的定义如下:

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {

	String value() default "";
}

从定义可以看出来,@Component只能使用在类级别。并且有一个参数。 被@Component修饰的类,在正确的配置下,可以被Spring MVC正确解析为一个Component

从源代码可以看出来,@Service@Service@Repository@Component的实现几乎一样,只是语义不同。

控制层(@Service)、业务逻辑层(@Service)、持久层(@Repository,相当于DAO), 当无法确定是哪一层的时候,就可以认为是@Component