前置操作
如果是在 spring-config 中添加 bean 标签来注册内容,每个类都要弄一次就显得麻烦和臃肿了,对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。
配置扫描路径
使用五大类注解
@Controller
控制器:验证请求数据的正确性(安保系统)
@Controller 实现 Bean 存储:
package com.java.demo;import org.springframework.stereotype.Controller;@Controller // 这个注解表示:当前这个类会自动地存储到 spring 中
public class StudentController {public void say() {System.out.println("hi,Controller");}
}
读取 Bean:
标红的解释:这里本来指的是这个 Bean 对象的 id 的,但是这里使用的是类注解来存储的,所以这里的值应该是:使用首字母为小写的原类名。如果原类名的第一个和第二个字母均为大写,那么此处的值则为 原类名。
@Service
服务层:编排和调度具体执行方法(客服中心)
package com.java.demo;import org.springframework.stereotype.Service;@Service // 这个注解表示:当前这个类会自动地存储到 spring 中
public class StudentService {public void say() {System.out.println("hi,Service");}
}
@Repository
持久层:和数据库进行交互,操作数据库(执行者)= DAO 层(Data Access Object)
package com.java.demo;import org.springframework.stereotype.Repository;@Repository // 这个注解表示:当前这个类会自动地存储到 spring 中
public class StudentRepository {public void say() {System.out.println("hi,Repository");}
}
@Component
组件:用来存放工具类
package com.java.demo;import org.springframework.stereotype.Component;@Component // 这个注解表示:当前这个类会自动地存储到 spring 中
public class StudentComponent {public void say() {System.out.println("hi,Component");}
}
@Configuration
配置项:项目中的一些配置
package com.java.demo;import org.springframework.context.annotation.Configuration;@Configuration // 这个注解表示:当前这个类会自动地存储到 spring 中
public class StudentConfiguration {public void say() {System.out.println("hi,Configuration");}
}
五大类的关系
通过查看源码可以发现:@Controller、@Service、@Repository、@Configuration 这四个都是@Component 的 “子类”,都是针对于 @Component 的扩展。
五大类注解的由来
JavaEE 的标准分层
阿里的分层标准
结论:无论是官方的标准还是行业的标准,都会拥有 @Controller、@Service、@Repository 这三个基本层,而 @Configuration、@Component 则是属于 “扩展” 的。