[刘阳Java]_Spring常用注解介绍_第6讲
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 { }
分类:
Spring_学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下