Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置。在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为在Spring2.0的版本时候是没有出现注解的使用

1. Spring常用注解如下

  • @Component
  • @Autowired
  • @Qualifier
  • @Scope
  • @Controller
  • @Service
  • @Repository

2. 使用Spring注解的时候一定关注Spring框架需要加入的包【很重要】,我们这里以spring4.0.3版本为例来介绍

  • common-logging.jar
  • spring-core-4.0.3.jar
  • spring-context-4.0.3.jar
  • spring-beans-4.0.3.jar
  • spring-expression-4.0.3.jar
  • spring-aop-4.0.3.jar,【此jar包在使用<context:component-scan/>需要导入此包】

3. @Component注解

  • @Component主要用于将一个Java类注入到Spring框架中,它相当于XML配置文件中的<bean id=”xxx” class=”xxx”/>
  • 当使用了Spring注解后,我们需要在配置文件中添加<context:component-scan/>来扫描添加了注解的类,这样子声明注解的类才能起作用
  • Bean实例的名称默认是Bean类的首字母小写,其他部分不变。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.gxa.spring.day02"></context:component-scan> </beans>
package com.gxa.spring.day02;

import org.springframework.stereotype.Component;

@Component
public class StudentAnnotation {
}
package com.gxa.spring.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.gxa.spring.day02.StudentAnnotation; public class Test02 { @Test
public void m06() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
StudentAnnotation studentAnnotation = context.getBean("studentAnnotation", StudentAnnotation.class);
System.out.println(studentAnnotation.hashCode());
} }

4. 除了@Component注解,Spring容器提供了3个功能和@Component注解等同。它们分别是用于对Dao,Service及Web层的Controller进行注解

  • @Repository:用于对Dao实现类注解
  • @Service:用于对Service实现类注解
  • @Controller:用于对Controller实现类注解

5. @Autowired注解

  • Spring2.5引入了@Autowired注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作(DI依赖注入工作)
  • Spring通过@Autowired注解实现Bean之间的依赖关系
package com.gxa.spring.day02;

import org.springframework.stereotype.Component;

@Component
public class TeacherAnnotation {
public void getTeacherName() {
System.out.println("===刘老师好===");
}
}
package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class StudentAnnotation { /**
* 通过Autowired来自动装备Student所依赖的对象
* 无需创建setter方法
* 无需编写XML配置文件中<property/>
*/
@Autowired
private TeacherAnnotation teacherAnnotation; public void showTeacher() {
teacherAnnotation.getTeacherName();
}
}
  • @Autowired(required = false),告诉 Spring:在找不到匹配 Bean 时也不报错
package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class StudentAnnotation { /**
* 注意TeamAnnotation没有加入@Component
* 当StudentAnnotation依赖TeamAnnotation会报错
* 但是如果加入@Autowired(required=false)就不会报错
*/
@Autowired(required=false)
private TeamAnnotation teamAnnotation; public void showTeacher() {
teacherAnnotation.getTeacherName();
}
}

6. @Qualifier指定注入Bean的名称

  • 如果容器中有一个以上匹配的Bean时,则可以通过@Qualifier注解限定注入的Bean名称
package com.gxaedu.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; @Component
public class Computer {
@Autowired
@Qualifier("storage01")
private Storage storage;
public void m01() {
storage.show();
}
}
package com.gxaedu.bean;

import org.springframework.stereotype.Component;

@Component("storage01")
public class Storage { //此类是在com.gxaedu.bean下的Storage
public void show() {
System.out.println("东芝硬盘");
}
}
package com.gxaedu.test;

import org.springframework.stereotype.Component;

@Component
public class Storage { //此类是在com.gxaedu.test下的Storage }

7. @Qualifier为方法指定注入Bean名称

package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; @Component
public class StudentAnnotation { private CourseAnnotation courseAnnotation; /**
* @Autowired来自动装备构造方法里面的对象
* @Qualifier来指定依赖对象的bean
* @paramcourseAnnotation
*/
@Autowired
public StudentAnnotation(@Qualifier("course") CourseAnnotation courseAnnotation) {
this.courseAnnotation = courseAnnotation;
} public void showCourse() {
System.out.println(courseAnnotation.hashCode());
}
}

8. @Scope注解来显式指定Bean作用范围

@Scope("prototype")
@Component
public class Car {
}

[刘阳Java]_Spring常用注解介绍_第6讲的更多相关文章

  1. [刘阳Java]_Spring相关配置介绍_第5讲

    这一节我们介绍一下Spring框架的相关常用配置 Spring依赖注入的两种方式(构造方法注入和setter方式注入) p-namespace方式配置 properties属性文件配置方式 集合对象配 ...

  2. [刘阳Java]_Spring AOP注解详细介绍_第8讲

    这节内容非常关键,我们会比较详细地介绍Spring AOP注解的使用 1. 要使用Spring AOP注解,必须满足如下的事项 导入Aspectj的jar.Spring3.0-AOP.jar.aopa ...

  3. [刘阳Java]_MyBatis_实体关系映射_第8讲

    MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...

  4. [刘阳Java]_SpringMVC访问静态资源_第9讲

    有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等).其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径 &l ...

  5. [刘阳Java]_BeanNameViewResolver视图解析器_第8讲

    BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...

  6. [刘阳Java]_ResourceBundleViewResolver视图解析器_第7讲

    ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析"逻辑视图".该properties文件默认是放在classpath路径下的v ...

  7. [刘阳Java]_InternalResourceViewResolver视图解析器_第6讲

    SpringMVC在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器 InternalResourceViewResolver是SpringMVC中比较常用视图解析器. 网 ...

  8. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  9. [刘阳Java]_Spring AOP入门_第7讲

    AOP技术个人认为是能够完善(改善)面向对象编程OOP.为什么这么说,我们得先从AOP的概念说起,然后通过一段简单的例子加以佐证.这样子大家就可以慢慢地了解AOP 1. AOP概念 AOP为Aspec ...

随机推荐

  1. MPC算法

    MPC算法 一.    引言 在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon  ). 模型预测控制算法 一种 ...

  2. python2向python3移植问题

    问题: payload = "A"*140 # padding ropchain = p32(puts_plt) ropchain += p32(entry_point) ropc ...

  3. python_xlutils : python利用xlutils修改表格内容

    一.xlutils是什么 是一个提供了许多操作修改excel文件方法的库: 属于python的第三方模块 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlu ...

  4. windows10环境下gcc环境变量的配置

    1.首先打开控制面板-系统和安全-系统-高级系统设置,打开环境变量 2.在用户变量里找到Path,点击编辑,点击新建,找到Qt的tools安装目录并将目录复制进去保存,我的目录是C:\Qt\Qt5.9 ...

  5. 【NX二次开发】Block UI 组

    设置组及组内成员不可见 this->group->GetProperties()->SetLogical("Show", false); 设置组及组内成员不可操作 ...

  6. 【NX二次开发】Block UI 超级点

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  7. 「10.15」梦境(贪心)·玩具(神仙DP)·飘雪圣域(主席树\树状数组\莫队)

    A. 梦境 没啥可说的原题.... 贪心题的常见套路我们坐标以左端点为第一关键字,右端点为第二关键字 然后对于每个转折点,我们现在将梦境中左端点比他小的区间放进$multiset$里 然后找最近的右端 ...

  8. Electron-Vite2-MacUI桌面管理框架|electron13+vue3.x仿mac桌面UI

    基于vue3.0.11+electron13仿制macOS桌面UI管理系统ElectronVue3MacUI. 前段时间有分享一个vue3结合electron12开发后台管理系统项目.今天要分享的是最 ...

  9. 聊聊 Feign 的实现原理

    What is Feign? Feign 是⼀个 HTTP 请求的轻量级客户端框架.通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文 ...

  10. vue中使用element-ui出现Couldn't find preset "es2015" relative to directory

    这是因为没有安装ES 标准 使用 npm install babel-preset-es2015 -d 安装之后就好了