引言
- 这是依赖注入 Bean 属性的最后一种方式
- 其中针对 非 Web 项目和 Web 项目又有不同的细微差别
- 以下是笔记
名词解释
-
注解:
- 注解:就是一个类,使用@注解名称
- 开发中:使用注解 取代 xml配置文件
-
eclipse 中 Servlet 的注解:
- 当创建动态web项目时候,version选择 3.0 的前提下。
- 此时,可以选择通过注解方式配置 Servlet,只需要在 Servlet 前面加 @WebServlet 即可。
- 相对旧的配置 Servlet 方式而言,最大的变化在于不需要在 xml 文件中配置。
-
对于非 web 项目所用注解:
- @Component :取代< bean class="">
- @Component(“id”) :取代 < bean id="" class="">
-
对于 web 项目,从 @Component 注解衍生出了 3 个专用注解,分别对应不同的层,以便于管理:
- @Repository(“名称”) :对应dao层
- @Service(“名称”) :对应service层
- @Controller(“名称”) :对应web层
- @Autowired :自动根据类型注入
- @Qualifier(“名称”) :指定自动注入的id名称
- @Resource(“名称”) :相当于 ④ + ⑤
- @ PostConstruct : 自定义初始化
- @ PreDestroy : 自定义销毁
Sping 使用注解准备工作
- Spring 默认情况下,注解处于关闭状态,此时,需要手动开启
- 在 beans.xml 中修改为支持注解方式
- 然后根据注解的方式具体进行调用即可
非 Web 项目示例(不分 dao,service,web 层)
- 首先根据上文配置 beans.xml ,开启注解
- 以下是两种不同注解方式的示例
@Component方式
-
service 类
-
测试类
@Component(“id”)
- service 类
- 测试类
Web 项目示例(分 dao,service,web 层)
若分层而不使用注解
- beans.xml 配置文件
- 测试结果
分层且使用注解
- beasn.xml 配置文件
- 三者之间调用关系
- 同样的,这 3 个衍生注解也可以使用加入 id 的方式来实现精准调用
- 在这里,需要先在注解后加入 Id,然后再需还要调用的地方使用 Qualifier(“名称”) 来达到指定注解的效果。 这里仅作代码演示。
分层时使用不同名称衍生注解意义
- 对于 web 项目,不同层之间又有个调用与被调用的关系,一般 dao 是处于最底层被调用 ,service 处于中间层 ,web 处于更高一层。若较高一层想要调用较低一层,前提是较低一层已经被实现。
- 当使用这些不同的注解的时候,系统就根据不同名称对应的不同层,优先寻找 dao 层,然后在容器中创建这个对象。继而是 Service 层,web 层。
- 这样,当通过 Spring 方式,较高一层调用较低一层时,Spring 容器内就已经生成了这个较低层的 Bean,从而避免了调用报错的情况。