【SpringIOC】Spring基于注解的IOC配置
概叙
用于创建对象的注解
他们的作用就和在xml配置文件中编写一个<bean>标签实现的功能是一样的
@Component:用于把当前类对象存入spring类容器中
属性:value——用于指定bean的id,当我们不写它的默认值是当前类名且首字母改小写
@Controller:一般用在表现层
@Service:一般用在业务层
@Repository:一般用在持久层
以上三个注解他们的作用与属性和Component是一模一样的。他们三个是Spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰。
配置文件
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.czy"></context:component-scan>
<!--告知spring在创建容器时要扫描的包,配置所需要的标签不在beans的约束中,而是一个名称为context名称空间和约束中-->
</beans>
实体类
用于注入数据的注解(可放在变量上也可放在setter方法上)
他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的
@Autowired:
作用:自动按照类型注入。主要容器中有唯一的一个bean对象类型和要注入的变量类型匹配(包括接口匹配),就可以匹配成功,如果IOC容器中没有任何bean的类型和要注入的变量类型匹配则报错
如果有多个匹配时,首先按照类型圈定出多个匹配的对象,然后根据变量名作为key,找到bean(若没有相同的则报错)。
出现位置:可以是成员变量上,也可以使方法上
细节:不用setter,也可以注入成功
不用setter也可以注入成功的原因:通过数据类型直接去IOC容器中寻找该对象,注入到变量中
多个匹配的情况,根据变量名找对象,变量名与ioc的key相同则可以找到,否则会抛出异常
@Qualifier:
作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以。
属性:
value:用于指定注入bean的id
给类成员注入要与Autowired配合
@Resource:
作用:直接按照bean的id注入。可以独立使用
属性:
name:指定bean的id
以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现
另外,集合类型的注入只能通过xml实现。
@Value:
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据类型的值。它可以使用spring中SpEL(也就是spring的el表达式)
SpEL的写法:${表达式}
用于改变作用范围的注解
他们的作用就和在bean标签中使用scope属性的功能是一样
@Scope:
作用:用于指定bean的作用范围
属性:
value:指定范围的取值。常用取值:singleton(单例) prototype(多例)
和生命周期相关
他们的作用就和在bean标签中使用init-method和destroy-method是一样的
@PreDestroy
作用:用于指定销毁方法
@PostConstruct
作用:用于指定初始化方法
分类:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!