@Repository
持久层(Mapper数据库交互)
@Repository
public class UserMapperImpl implements UserMapper {
@Override
public void addUser() {
System.out.println("添加user");
}
}
@Repository被@Component修饰 所以该类也会交给Spring容器管理 源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Component
public @interface Repository {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
==
@Service业务层(Service编写业务逻辑)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser() {
userMapper.addUser();
}
}
//@Service源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Component
public @interface Service {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@Controller
控制层(Controller与前端页面交互) 使用@Controller,把类交给SpringMVC管理,SpringMVC交给Spring容器管理
@Controller
public class UserController {
@Autowired
private UserService userService;
public void addUser() {
userService.addUser();
}
}
//@Controller源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Component
public @interface Controller {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@Repository、@Service、@Controller源码是一样的 功能也是一样的 只是名称不同,便于区分
@ResponseBoby用在类或方法上 用在类上时,类中方法的返回值为对象时,封装成JSON后 返回 用在方法上时,返回值为JSON
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@documented
public @interface ResponseBody {
}
@RestController
用在类上,类中所有方法的返回值都是JSON
等同于@Controller + @ResponseBoby 因为她同时被这两个注释标记了
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
@RequestMapping
访问路径



