IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 5. 基于注解使用IoC -> 正文阅读

[Java知识库]5. 基于注解使用IoC

一. 使用注解的好处

(1)直接将Bean注册到IoC容器中,无需为Bean编写xml配置文件,提高了开发效率

(2)进行注入依赖时,也无需在Bean类中提供setter方法

二. 使用注解实现IoC的开发步骤

1. 修改spring.xml配置文件—添加context命名空间的声明

使用注解时,需要告诉Spring在创建IoC容器时,把哪些类作为Bean注册到IoC容器中
因此需要配置一个标签进行包扫描,包下的所有类将被自动注册到IoC容器中

该标签没有定义在beans名称空间中,而是在名称为context名称空间中定义的,所以注解配置的第一步是添加context名称空间

<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">

</beans>

2. 添加<context:component-scan/>标签配置自动扫描包

<context:component-scan base-package="包名"/>

Spring将会自动扫描base-package属性所指定的包及其子包中的所有类,一旦检测到此类中使用了注解,就自动将此类的对象作为Bean注册到IoC容器中,此方式比在配置文件中编写标签更简单

3. 使用注解将Bean组件自动注册到IoC容器中

(1)老版注解

@Component
在Bean类上标注@Component注解后,Bean组件将自动注册到IoC容器中

@Component(value=“bean在IoC容器中的id”)
如果不指定value属性,则Bean的名称默认为类名的首字母小写形式
如果注解中只包含value属性时,属性名可以省略

@Component
@Component(value="user")
@Component("user")
public class User{...}

【特点】@Component注解在MVC各层中通用,语义不清晰

(2)新版注解

@Controller—表现层专用的注解,表示该Bean是一个控制器对象

@Controller
public class UserController{...}

@Service—业务层专用的注解,表示该Bean是一个业务对象

@Service(value="userService")   
public class UserServiceImpl implements UserService{...}

@Repository—持久层专用的注解,表示该Bean是一个DAO对象

@Repository("userDAO")   
public class UserDAOImpl implements UserDAO{...}

【特点】在MVC各层中使用专用的注解,语义清晰

三. Bean的作用范围

在Bean类上标注@Scope注解

@Scope(value="singleton|prototype")
public class User{...}

四. Bean的生命周期

(1)在初始化方法上标注@PostConstruct注解

@PostConstruct
public void init(){...}

(2)在销毁方法上标注@PreDestroy注解

@PreDestroy
public void destroy(){...}

五. Bean的依赖注入

1. 注入简单类型的数据

(1)在Bean类的属性上标注@Value注解
(2)无需提供属性的setter方法

2. 注入对象类型的数据

(1)在Bean类的属性上标注@AutoWired注解或@Resource注解
(2)无需提供属性的setter方法

【方式1】根据Bean的类型注入

(1)在Bean类的属性上标注@AutoWired注解,该注解在IoC容器中查找指定类型的Bean对象,自动完成依赖关系的注入

(2)@Autowired注解只能按类型匹配Bean,如果IoC容器中有多个类型相同的Bean,则抛出异常

(3)如果存在上述情况,可以配合使用@Qualifier注解,再进一步按名称匹配Bean
默认名称是类名的首字母小写,也可以通过value属性要查找的指定Bean名称
@Qualifier注解不能单独使用,必须配合@Autowired注解一起使用

@Autowired
@Qualifier("userService")
private UserService userService;

【方式2】根据Bean的名称注入

(1)在Bean类的属性上标注@Resource注解,默认在IoC容器中查找名称为类名的首字母小写的Bean,可以使用name属性指定要查找的Bean名称

(2)如果按照名称无法匹配Bean,@Resource注解再按照类型查找,可以使用type属性指定要查找的Bean类型

@Resource(name="userDAO")
private UserDAO userDAO;

@Autowired注解和@Resource注解的区别

【区别1】@Autowired默认按照类型查找Bean,按名称查找时,需要配合@Qualifier注解一起使用
@Resource默认按照名称查找Bean,比较方便

【区别2】@Autowired是Spring框架提供的注解
@Resource是JSR250规范提供的Java注解

JSR—Java Specification Requests—Java规范提案
JSR是指向JCP(JavaCommunity Process)提出新增一个标准化技术规范的正式请求
【参考网址】https://blog.csdn.net/u013182960/article/details/90257159


@Resource的装配顺序 了解

(1)同时指定了name和type属性,则根据名称和类型查找,找不到则抛出异常
(2)只指定了name属性,则根据名称查找,找不到则抛出异常
(3)只指定了type属性,则根据类型查找唯一匹配Bean,找不到或者找到多个都会抛出异常
(4)既没有指定name属性,也没有指定type属性,则先根据名称查找,如果找不到,再根据类型查找,如果还找不到,最终抛出异常

  1. 注入集合类型的参数

对于array,list,set,map,properties等集合类型,元素的数据无法使用注解注入,只能通过XML配置实现

Spring系列学习笔记会每日更新,欢迎大家关注订阅点赞!!!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:17:51  更:2022-03-10 22:20:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:58:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码