当前位置: 首页 > news >正文

[Spring] Spring注解简化开发

✨✨个人主页:沫洺的主页

 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                           📖MyBatis专栏

💖💖如果文章对你有所帮助请留下三连✨✨

🥏初始环境搭建

🎈applicationContext.xml配置bean 

🎈获取bean

🥏注解开发bean定义

🎫使用@Component定义bean,代替xml配置bean

@Component("bookDao")
public class BookDaoImpl implements BookDao {
}
@Component
public class BookServiceImpl implements BookService {
}

🎫核心配置文件中通过组件扫描加载bean

<context:component-scan base-package="com.moming"/>

🎫Spring提供@Component注解的三个衍生注解(作用是一模一样,只是起到见名知意的意思)

  • 🎈@Controller:用于表现层bean定义
  • 🎈@Service:用于业务层bean定义
  • 🎈@Repository:用于数据层bean定义
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
}
@Service
public class BookServiceImpl implements BookService {
}

纯注解开发

🎫Spring3.0升级了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道

🎈@Configuration//注解用于设定当前类为配置类

@Configuration

🎈代替xml配置代码

<?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">
</beans>

🎈@ComponentScan("com.moming")//注解用于设定扫描路径,

🎈代替xml设定扫描路径

<context:component-scan base-package="com.moming"/>

🎈此注解只能添加一次,多个数据使用数组,如

@ComponentScan({"com.moming.service","com.moming.dao"})

注意

  • 🎈加载XML配置文件初始化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

  • 🎈加载配置类初始化容器

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

🥏bean管理

🎫bean作用范围(单例,多例),单例(容器只创建一次),多例(每调用一次就创建一次)

🎈使用@Scope定义bean作用范围

🎫bean生命周期

🎈使用@PostConstruct@PreDestroy定义bean生命周期

🥏依赖注入

🎫自动装配@Autowired,按照类型装配,底层使用反射里的暴力反射

🎫注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法

🎫注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

🎫如果有两个相同类型的实现类,那么单单使用@Autowired去按照类型装配就会报错如下图所示

所以就要使用按照名称进行装配

🎫使用@Qualifier注解开启指定名称装配bean

🎫注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

🎫使用@Value实现简单类型注入 

 🎫使用@PropertySource注解加载properties文件

 🎫注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

🥏第三方bean管理

🎫第三方bean管理

🎫将独立的配置类加入核心配置

🎈方式一:导入式(推荐使用)

🎈使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式

🎈方式二:扫描式

🎈使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息

🎫第三方bean依赖注入

🎈简单类型依赖注入

🎈引入类型依赖注入

@Bean
    public DataSource dataSource(BookDao bookDao){
        System.out.println(bookDao);
        DruidDataSource ds = new DruidDataSource();
        //属性设置
        return ds;
    }

🎈引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

🥏注解开发总结

🎫XML配置与注解配置比较

相关文章:

  • Python 反编译:pycdc工具的使用
  • Qt5开发从入门到精通——第八篇四节( 模型/视图结构—— 代理 (Delegate))
  • mysql 5.7占用内存大优化
  • 【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?
  • Unity Metaverse(六)、关于Avatar换装系统的示例工程
  • Vue 3 快速上手
  • 30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
  • 【Java牛客刷题】入门篇(05)
  • docker入门
  • 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0
  • 【Verilog 流水线设计】以全加器为例阐述流水线设计的影响
  • spring boot 使用Mybatis-plus的查询方法
  • nginx中root和alias的区别
  • pytorch深度学习训练模板
  • 【Qt+FFMPEG】 - 封装 解码音视频 线程
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angular 响应式表单之下拉框
  • Fastjson的基本使用方法大全
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript设计模式与开发实践系列之策略模式
  • Java-详解HashMap
  • k8s 面向应用开发者的基础命令
  • laravel5.5 视图共享数据
  • leetcode386. Lexicographical Numbers
  • node入门
  • PhantomJS 安装
  • Spring Cloud中负载均衡器概览
  • SpringCloud集成分布式事务LCN (一)
  • 关于 Cirru Editor 存储格式
  • 简单实现一个textarea自适应高度
  • 三栏布局总结
  • 深度学习在携程攻略社区的应用
  • 系统认识JavaScript正则表达式
  • 学习JavaScript数据结构与算法 — 树
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • !!java web学习笔记(一到五)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (超详细)语音信号处理之特征提取
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (算法)Travel Information Center
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)Unity3DUnity3D在android下调试
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • 、写入Shellcode到注册表上线
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net framework4与其client profile版本的区别
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...