注解编程

目录

  • 注解基础概念
  • 注解的作用
  • 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 2.x)

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

对象创建相关注解

@Component

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

@Component 细节:

@Component("u")
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=""/>

注意:

注入相关注解

用户自定义类型 @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 类型

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

  1. Spring三种对象创建方式

    1.创建方式1:无参构造 我们先创建一个User类: public class User {private String name;private int age;public User() {Sys ...

  2. Spring基础篇:高级注解编程

    文章内容来自于B站孙哥说Spring 第一章:@Configuration 一:配置Bean替换XML细节 二:应用配置Bean工厂对象 三:配置Bean细节分析 1:整合Logback 三:@Com ...

  3. 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发

    Spring注解开发 Spring是轻代码重配置的框架,配置比较繁重,会影响开发效率.这个时候可以通过注解开发,注解代替xml配置文件可以简化配置,提高开发效率. Spring原始注解 注解分为原始注 ...

  4. spring基础概述

    1.Spring概述Spring是分层的java SE/EE应用 full-stack 轻量级开源框架,以IOC(Inverse of control)翻转控制和AOP(Aspect Oriented ...

  5. Spring基础知识笔记

    目录 1.spring简介 1.1 原生web开发存在的问题: 1.2 sprin框架 2.spring架构 3.spring IOC(控制反转)(xml配置文件配置) 基于xml配置文件: 3.1 ...

  6. spring基础Bean管理基于xml注入

    1.基于xml注入属性 1.什么是Bean管理 Bean管理指的是两个操作 (1) Spring创建对象 (2) Spirng注入属性 2.Bean管理操作有两种方式 (1)基于xml配置文件方式实现 ...

  7. Spring中Bean对象的存储和获取

    目录 1. 更简单的将bean存储到spring中 1.0 前置工作,在配置文件中设置bean扫描的根路径 1.1 通过注解将bean存储到spring中 1.1.1 @Controller[控制器] ...

  8. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

  9. Spring基础专题——第十一章(高级注解编程完结)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

最新文章

  1. JavaScript之function类型
  2. 机房收费系统重构(三)—工厂+反射+DAL
  3. 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)
  4. SPOJ Problem 6219:Edit distance
  5. ogg 查看某条更新_明道云Web 6.1更新:日历视图上线
  6. delphi 一些知识文章地址记录(正则)
  7. pyqt5 treeview鼠标右键菜单事件_【动手实践】使用 Vue 自定义指令实现右键菜单...
  8. 建立唯一索引后mysql策略_【MySQL】MySQL索引背后的之使用策略及优化【转】
  9. datagridview使用mysql_使用DataGridView进行增删改查,并同步到数据库
  10. mongodb 远程连接
  11. 【linux】修改某一行
  12. 《信号与系统学习笔记》—线性反馈系统(一)
  13. 【竞赛02-a】【题解】第十二届电工杯全国大学生数学建模大赛B题
  14. Mac电脑版微信】双开方法,最简单的微信多开教程
  15. HTML怎么进行文本居中对齐,css文字怎么居中对齐?
  16. 【Proteus】多功能数字时钟设计
  17. linux快速切换目录
  18. 论能逼疯一个人的nvidia显卡驱动在ubuntu16.04上的安装
  19. UPC10728:Imputation
  20. 苹果手机投影到墙上_实用派amp;小零碎:快充数据线、实木理线器、小电视支架、高清投影仪……...

热门文章

  1. 6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解
  2. /usr/lib/sudo/sudoers.so must be only be writable by owner
  3. ubuntu分解压缩包
  4. OpenCV Stitching 工程搭建
  5. E:Johnny and Grandmaster
  6. Acwing 252. 树 点分治
  7. Codeforces Round #630 (Div. 2) F. Independent Set 树形dp
  8. Educational Codeforces Round 103 (Rated for Div. 2) D. Journey dp
  9. CF1157G. Inverse of Rows and Columns
  10. Pagodas HDU - 5512