Spring IoC — 基于注解

本文详细介绍了Spring IoC基于注解的配置,包括@Component、@Scope、@Lazy等核心注解的用法,以及@Autowired和@Resource的自动装配。通过实例讲解如何在Maven项目中整合Spring,并展示如何在Spring容器中声明和初始化带注解的实体类。
摘要由CSDN通过智能技术生成

1. Spring IoC — 基于注解

SpringIoc的使用,需要我们通过XML将类声明给Spring容器进行管理,从而通过Spring工厂完成
对象的创建及属性值的注入;
Spring除了提供基于XML的配置方式,同时提供了基于注解的配置:直接在实体类中添加注解声明
给Spring容器管理,以简化开发步骤。

1.1 Spring框架部署

1.1.1 创建Maven项目

1.2.2 添加SpringIoC依赖

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.16.RELEASE</version>
</dependency>

1.2.3 创建Spring配置文件

因为Spring容器初始化时,只会加载applicationContext.xml文件,那么我们在实体类中添加的注
解就不会被Spring扫描,所以我们需要 在applicationContext.xml声明Spring的扫描范围 ,以达
到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
       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:annotation-config/>
       <!-- 声明Spring工厂注解的扫描范围 -->
       <context:component-scan base-package="com.cg.beans"/>
 </beans>

1.2 IoC常用注解

1.2.1 @Component

  • 类注解,声明此类被Spring容器进行管理,相当于bean标签的作用
  • @Component(value=“stu”) value属性用于指定当前bean的id,相当于bean标签的id属性;
    value属性也可以省略,如果省略当前类的id默认为类名首字母改小写
  • 除了@Component之外 @Service、@Controller、@Repository这三个注解也可以将类声明给
    Spring管理,他们功能相同,主要是语义上的区别
    • @Controller 注解主要声明将控制器类配置给Spring管理,例如Servlet
    • @Service 注解主要声明业务处理类配置Spring管理,Service接口的实现类
    • @Repository 直接主要声明持久化类配置给Spring管理,DAO接口
    • @Component 除了控制器、servcie和DAO之外的类一律使用此注解声明

1.2.2 @Scope

  • 类注解,用于声明当前类单例模式还是 非单例模式,相当于bean标签的scope属性
  • @Scope(“prototype”) 表示声明当前类为非单例模式(默认单例模式)

1.2.3 @Lazy

  • 类注解,用于声明一个单例模式的Bean是否为懒汉模式
  • @Lazy(true) 表示声明为懒汉模式,默认为饿汉模式(Spring容器初始化阶段就会
    完成此对象的创建)

1.2.4 @PostConstruct

  • 方法注解,声明一个方法为当前类的初始化方法(在构造器之后执行),相当于bean标签的initmethod属性

1.2.5 @PreDestroy

  • 方法注解,声明一个方法为当前类的销毁方法(在对象从容器中释放之前执行),相当于bean标
    签的destory-method属性

1.2.6 @Autowired

  • 属性注解、方法注解(set方法),声明当前属性、方法自动装配,默认byType
  • @Autowired(required = false) 通过requried属性设置当前自动装配是否为必须(默认必须——如
    果没有找到类型与属性类型匹配的bean则抛出异常)
    • byType
    • ref引用
@Autowired
//@Qualifier("c2")当前类型有多个相同时,通过id c2 去自动装配(bean的id)
public void setClazz(@Qualifier("c2") Clazz clazz) {
this.clazz = clazz;
}

1.2.7 @Resource

  • 属性注解,也用于声明属性自动装配
  • 默认装配方式为byName,如果根据byName没有找到对应的bean,则继续根据byType寻找对应
    的bean,根据byType如果依然没有找到Bean或者找到不止一个类型匹配的bean,则抛出异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值