(十一)Spring 基础注解(对象创建相关注解、注入相关注解)

注解编程

目录

  • 注解基础概念
  • 注解的作用
  • Spring 注解的发展历程
  • Spring 基础注解(Spring 2.x)
  • 对象创建相关注解
  • @Component
  • @Repository、@Service、@Contoller
  • @Scope
  • @Lazy
  • 生命周期注解 @PostConstruct、@PreDestroy
  • 注入相关注解
  • 用户自定义类型 @Autowired
  • JDK 类型

 

 

注解基础概念

什么是注解编程

  • 在 类 或者 方法 上加入特定的注解(@xxx),完成特定功能的开发。
@Component
public class XXX{}

为什么要学习注解编程

  1. 注解开发方便,代码简单, 开发速度大大提高。
  2. 注解开发是 Spring 开发潮流
    Spring 2.x 引入注解,Spring 3.x 完善注解,SpringBoot 普及、推广 注解编程。

注解的作用

替换 XML 这种配置形式,简化配置。
在这里插入图片描述
替换接口,实现调用双方的契约性。

  • 通过注解的方式,在功能调用者和功能提供者之间达成契约,进而进行功能的调用。因为注解的应用的更为方便灵活,所以在现在的开发中,更推荐通过注解的方式完成。
    在这里插入图片描述

Spring 注解的发展历程

  1. Spring 2.x: 开始支持注解编程 @Component@Service@Scope
    目的:提供的这些注解只是为了某些 XML 的配置,作为 XML 开发的有益补充。
  2. Spring 3.x: @Configuration@Bean
    目的:彻底替换 XML,基于纯注解
  3. Spring 4.x: SpringBoot 提倡使用注解进行开发

Spring 基于注解进行配置后,还能否解耦合呢?

  • 在 Spring 框架应用注解时,如果对注解配置的内容不满意,可以通过 Spring 配置文件覆盖。

Spring 基础注解(Spring 2.x)

这个阶段的注解,仅仅是简化 XML 的配置,并不能完全替代 XML。

对象创建相关注解

@Component

作用:替换原有 Spring 配置文件中的 <bean> 标签

  • id 属性:在 @Component 中提供了默认的设置方式,首字母小写(UserDAO --> userDAO)
  • class 属性:通过反射获得的 class 的内容
    在这里插入图片描述

@Component 细节:

  • 如何显式指定工厂创建对象的 id 值
@Component("u")
  • Spring 配置文件覆盖注解配置内容
applicationContext.xml
<bean id="user" class="com.yusael.bean.User"><property name="id" value="10"/>
</bean>
id值、class值 要和 注解 中配置的一样才会覆盖, 
否则 Spring 会创建新的对象。

@Repository、@Service、@Contoller

@Repository@Service@Controller 都是 @Component 的 衍生注解

本质上这些衍生注解就是 @Component,通过源码可以看见他们都使用了 @Component

它们的存在是为了:更加准确的表达一个类型的作用

@Repository
public class UserDAO {}@Service
public class UserService {}@Controller
public class UserController {}

注意:Spring 整合 Mybatis 开发过程中,不使用 @Repository@Component

@Scope

作用:控制简单对象创建次数
注意:不添加 @Scope,Spring 提供默认值 singleton

XML 配置:

<bean id="customer" class="com.yusael.Customer" scope="singleton | prototype"/>

注解:

创建单例对象
@Component
@Scope("singleton")
public class Customer {}创建多例对象
@Component
@Scope("prototype")
public class Customer {}

@Lazy

作用:延迟创建单实例对象
注意:一旦使用 @Lazy 注解后,Spring 会在使用这个对象的时候,再创建这个对象。

XML 配置:

<bean id="account" class="com.yusael.Account" lazy="true"/>

注解:

@Component
@Lazy
public class Account {public Account() {System.out.println("Account.Account");}
}

生命周期注解 @PostConstruct、@PreDestroy

初始化相关方法: @PostConstruct

InitializingBean
<bean init-method=""/>

销毁方法:@PreDestory

DisposableBean
<bean destory-method=""/>

注意:

  • 上述的两个注解并不是 Spring 提供的,由 JSR(JavaEE规范)520 提供
  • 再次验证,通过注解实现了接口的契约性

注入相关注解

用户自定义类型 @Autowired

在这里插入图片描述

@Autowired 细节

@Autowired 注解 基于类型进行注入 [推荐]
注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)

@Autowired
private UserDAO userDAO;

@Autowired@Qualifier 注解联合实现 基于名字进行注入 [了解]
注入对象的 id 值,必须与 @Qualifier 注解中设置的名字相同

@Autowired
@Qualifier("userDAOImpl")
private UserDAO userDAO;

@Autowired 注解放置位置

  • 放置在对应成员变量的 setter 方法上,调用 setter 方法赋值
  • 直接放置在成员变量上,Spring 通过反射直接对成员变量进行赋值 [推荐]

JavaEE 规范中类似功能的注解

  • JSR250 提供的 @Resource(name="userDAOImpl") 基于名字进行注入
    等价于 @Autowired 与 @Qualifier 联合实现的效果。
    注意:@Resource 注解如果名字没有配对成功,会继续 按照类型进行注入
  • JSR330 提供的 @Injection 作用与 @Autowired 完全一样,一般用在 EJB3.0 中

JDK 类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark Streaming之统计socket单词数

一、统计socket单词数 侦听TCP套接字的数据服务器接收到的文本数据中的单词数。 二、maven配置 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/…

使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

介绍这是“使用 ASP.NET Core &#xff0c;Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用”系列文章的第二篇。以下可以看其他篇目&#xff1a;使用 ASP.NET Core &#xff0c;Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用 第一篇 &…

jzoj4786-[NOIP2016提高A组模拟9.17]小a的强迫症【数论】

正题 题目大意 nnn个颜色第iii个个数为numinum_inumi​个&#xff0c;然后要求第iii种颜色的最后一个一定在第i1i1i1种的最后一个前面。求方案总数。 解题思路 首先先定义一个1∼n1\sim n1∼n的序列&#xff0c;然后依次将剩下的数插入。 第iii个颜色有z(∑j1i−1numj)1z(\su…

0-MyBatis简介

MyBatis简介 目录 简介MyBatis 历史MyBatis特点为什么要使用 MyBatis&#xff1f;JDBC 缺点Hibernate 缺点MyBatis简介 MyBatis 历史 MyBatis 原是 apache 的一个开源项目 iBatis&#xff1b;2010年6月这个项目由 apache software foundation 迁移到了 google code&#xf…

揭秘微软6万工程师DevOps成功转型的技术「武器」

在微软&#xff0c;通过其自身数年的 DevOps 转型&#xff0c; 6 万名工程师实现了更好的软件平台创新和快速迭代。微软有庞大的技术产品矩阵&#xff0c;同时也具有每天发布的能力&#xff0c;其中&#xff0c;微软研发云是支撑整个开发过程与运维最重要的基础平台。微软研发云…

jzoj4787-[NOIP2016提高A组模拟9.17]数格子【矩阵乘法】

正题 题目大意 求121\times 212的方块铺满4n4\times n4n的方格方案总数。 解题思路 首先 当计算fnf_nfn​时&#xff0c; 显然最后一排可以(−−−−)(∣∣∣∣)(−−∣∣)(∣−−∣)(∣∣−−)(--\ --)(|\ \ |\ \ |\ \ |)(--\ \ |\ \ |)(|\ \ --\ \ |)(|\ \ |--)(−− −−)…

Flowable学习笔记(一、入门)

转载自 Flowable学习笔记&#xff08;一、入门&#xff09; 一、Flowable简介 1、Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义&#xff08;用于定义流程的行业XML标准&#xff09;&#xff0c; 创建这些流…

01-MyBatis入门程序

MyBatis入门程序 目录 1. 下载 Mybatis 核心包2. 创建工程&#xff0c;引入 MyBatis 核心包及依赖包3. 创建 customer 表&#xff0c;建立与表对应的 domain使用 lombok&#xff0c;开启注解创建 Customer 类4. 创建 MyBatis 核心配置文件 SqlMappingConfig.xml5. 创建表对象…

角落的开发工具集之Vs(Visual Studio)2017插件推荐

“ 工具善其事&#xff0c;必先利其器&#xff01;装好这些插件让vs更上一层楼”因为最近录制视频的缘故&#xff0c;很多朋友都在QQ群留言&#xff0c;或者微信公众号私信我&#xff0c;问我一些工具和一些插件啊&#xff0c;怎么使用的啊&#xff1f;那么今天我忙里偷闲整理一…

jzoj4788-[NOIP2016提高A组模拟9.17]序列【差分,贪心】

正题 题目大意 一个序列AAA可以每次选择一段区间(Ai1)%4(i∈[l..r])(A_{i}1)\%4(i\in [l..r])(Ai​1)%4(i∈[l..r])。求最少次数使其变成BBB序列。 解题思路 先计算出每个数字最少加多少可以变成目标数字记录入aaa数组。 然后若不考虑一个数要取模多次的话答案就是 ∑i1nmax…

02-MyBatis配置SQL打印

MyBatis 配置SQL打印 在 SqlMappingConfig.xml 中配置以下代码&#xff1a; <!--配置sql打印--> <settings><setting name"logImpl" value"STDOUT_LOGGING"/> </settings>运行效果&#xff1a;会显示 SQL 语句&#xff0c;查询结…

Flowable学习笔记(二、BPMN 2.0-基础 )

转载自 Flowable学习笔记&#xff08;二、BPMN 2.0-基础 &#xff09; 1、BPMN简介 业务流程模型和标记法&#xff08;BPMN, Business Process Model and Notation&#xff09;是一套图形化表示法&#xff0c;用于以业务流程模型详细说明各种业务流程。 它最初由业务流程管理…

ASP.NET Core文件上传与下载(多种上传方式)

前言前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了.打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧.ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧.正文1.使用模型绑定上传文件(官方例子)官方机器翻译的地址:https://docs.mic…

03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 目录 sql 语句中的 #{}#{} 模糊查询错误用法#{} 实现模糊查询sql 语句中的 ${}${} 实现模糊查询#{} 与 ${} 对比sql 语句中的 #{} 表示一个占位符号&#xff0c;通过 #{} 可以实现 preparedStatement 向占位符中设置值…

欢乐纪中A组周六赛【2019.5.25】

前言 话说中间jzojjzojjzoj炸了一次。 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC222(J−2)WYC(me)(J-2)WYC(me)(J−2)WYC(me)250250250100100100100100100505050444(J−2)ZYC(J-2)ZYC(J−2)ZYC200200…

SpringBoot集成Flowable

一、项目结构 二、maven配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

04-插入操作更新操作删除操作

保存更新删除 目录 插入操作获取插入的最后一个id更新操作删除操作插入操作 映射文件 Customer.xml &#xff1a; 插入数据的标签为 insert&#xff0c;与查询 select 区分开来。 parameterType 是输入参数类型&#xff0c;这里指定为 Customer 对象&#xff0c;即需要传入一…

微软跨平台移动开发工具套件HockeyApp宣布免费

HockeyApp 是一款领先的移动崩溃分析和应用发布服务&#xff0c;可为开发者提供实时崩溃分析报告、用户反馈、测试版分发平台以及测试分析等功能&#xff0c;于 2016 年被微软收购&#xff0c;随后集成在了 Visual Studio 应用中心中&#xff0c;与 Xamarin Insights 一起提供移…

P3914-染色计数【树形dp】

正题 题目链接:https://www.luogu.org/problemnew/show/P3914 题目大意 nnn个点每个点有些可以染的颜色&#xff0c;要求相邻颜色不相同&#xff0c;方案总数。 解题思路 树形dpdpdp&#xff0c;定义fx,if_{x,i}fx,i​表示点xxx的染颜色iii的方案数。然后定义zx∑i1mfxiz_x\s…

ASP.NET Core使用静态文件、目录游览与MIME类型管理

前言今天我们来了解了解ASP.NET Core中的静态文件的处理方式.以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了.ASP.NET Core则不同,因为是跨平台的,解耦了IIS,所以这些工作 我们可以在管道代码中处理.正文在我们的Web程序开发中,肯定要提…