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

Spring——Spring基于注解的IOC配置

基于注解的IOC配置

学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。

1.创建工程

在这里插入图片描述

1.1 pom.xml

<?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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wt</groupId><artifactId>Spring_IOC_Annotation</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- Spring常用依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.8.RELEASE</version></dependency></dependencies>
</project>

1.2 dao

/*** 持久层实现类*/
public class UserDaoImpl implements UserDao {@Overridepublic void addUser(){System.out.println("insert into tb_user......");}
}

1.3 service

/*** 业务层实现类*/
public class UserServiceImpl implements UserService {private UserDao userDao;public void addUser(){userDao.addUser();}
}

2 IOC

2.1 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd "><!-- 告知spring框架,在读取配置文件,创建容器时扫描包,依据注解创建对象,并存入容器中 --><context:component-scan base-package="com.wt"></context:component-scan>
</beans>

2.2 dao

@Repository
public class UserDaoImpl implements UserDao {... ...
}

2.3 service

@Service
public class UserServiceImpl implements UserService {... ...
}

3 DI

3.1 service

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public void addUser() {userDao.addUser();}
}

3.2 测试

/*** 模拟表现层*/
public class Client {public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = ac.getBean("userServiceImpl",UserService.class);userService.addUser();}
}

3 常用注解

3.1 用于创建对象的

以下四个注解的作用及属性都是一模一样的,都是针对一个的衍生注解只不过是提供了更加明确的语义化。

3.1.1 @Controller
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于表现层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

3.1.2 @Service
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于业务层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

  • 案例

    //@Service("userService")声明bean,且id="userServiceImpl"
    @Service//声明bean,且id="userServiceImpl"
    public class UserServiceImpl implements UserService {...   
    }
    
3.1.3 @Repository
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于持久层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

  • 案例

    //@Repository("userDaoImpl")声明bean,且id="userDaoImpl"
    @Repository//声明bean,且id="userDaoImpl"
    public class UserDaoImpl implements UserDao {@Overridepublic void addUser(){System.out.println("insert into tb_user......");}
    }
    
3.1.4 @Component
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;通用(三层架构之外的内容)。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

3.1.5 @Scope
  • 作用:

    指定bean的作用域范围。

  • 属性:

    value:指定范围的值,singleton prototype request session。

3.2 用于属性注入的

以下四个注解的作用相当于:<property name="" ref="">

3.2.1 @Autowired
  • 作用:

    自动按照类型注入。set方法可以省略。

  • 案例:

    @Service
    public class UserServiceImpl implements UserService {@Autowired //注入类型为UserDAO的beanprivate UserDao userDao;public void addUser(){userDao.addUser();}
    }
    
3.2.2 @Resource
  • 作用:

    自动按照名字注入。set方法可以省略。

  • 属性:

​ name:指定bean的id。

  • 案例:

    @Service
    public class UserServiceImpl implements UserService {@Resource(name="userDaoImpl")//注入id=“userDaoImpl”的beanprivate UserDao userDao;public void addUser(){userDao.addUser();}
    }
    
3.2.3 @Value
  • 作用:

    注入基本数据类型和String类型数据的

  • 属性:

​ value:用于指定值

  • 案例一

    @Service
    public class UserServiceImpl implements UserService {@Resource(name="userDaoImpl") //注入id=“userDaoImpl”的beanprivate UserDao userDao;@Value("张三")//注入Stringprivate String name;@Value("18")//注入Integerprivate Integer age;public void addUser(){System.out.println(name+","+age);userDao.addUser();}
    }
    
  • 案例二

    1. 创建config.properties

      name=张三
      age=18
      
    2. 加载配置文件

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd "><!--加载config.properties--><context:property-placeholder location="config.properties"/><context:component-scan base-package="com.wt"></context:component-scan>
      </beans>
      
    3. 注入属性值

      @Service
      public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Value("${name}")//注入Stringprivate String name;@Value("${age}")//注入Integerprivate Integer age;public void addUser() {System.out.println(name+","+age);userDao.addUser();}
      }
      

相关文章:

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…...

spring常用注解(一)springbean生命周期类

一、PostConstruct&#xff1a; 被PostConstruct修饰的方法会在服务器加载Servlet的时候运行&#xff0c;并且只会被服务器调用一次&#xff0c;类似于servlet的inti()方法。被PostConstruct修饰的方法会在构造函数之后&#xff0c;init()方法之前运行。...

【软件测试】2024年准备中/高级测试岗技术面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试基础知…...

第11课 实现桌面与摄像头叠加

在上一节&#xff0c;我们实现了桌面捕获功能&#xff0c;并成功把桌面图像和麦克风声音发送给对方。在实际应用中&#xff0c;有时候会需要把桌面与摄像头图像叠加在一起发送&#xff0c;这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…...

SAP 检验批状态修改(QA32质检放行报错:BS002 不允许 “访问使用决定“ (INL 101105415 ))

问题&#xff1a;在做QA32进行使用决策处理的时候发现这个报错&#xff1a; BS002 不允许 "访问使用决定" (INL 101105415 ) 原因&#xff1a;是因为这个检验批的状态已经变成Relase的状态了&#xff0c;但是决策还没有做 解决方案&#xff1a;将这个检验批的REL状态…...

华为交换机如何同时配置多个端口参数

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 华为交换机如何批量配置端口 使用端口组功能可以实现一次配置多个端口,以减少重复配置工作。端口组分为如下两种方式: 永久端口组。如果用户需要多次…...

Mybatis之多表查询

目录 一、简介 1、使用嵌套查询: 2、使用多个 SQL 语句&#xff1a; 3、使用关联查询&#xff1a; 4、使用自定义映射查询&#xff1a; 二、业务场景 三、示例 1、一对一查询 2、一对多查询 一、简介 MyBatis 是一个优秀的持久层框架&#xff0c;它提供了强大的支持来执…...

部署node.js+express+mongodb(更新中)

1-Linux服务器部署MongoDB 1.升级 yum -y update 2.下载MongoDB安装包 3.上传安装包 上传目录 &#xff1a; /usr/local/ 2-配置MongoDB环境变量并启动 1.配置环境变量全局启动 vi ~/.bash_profile 使用i命令进入编辑模式 添加: export PATH/usr/local/mongodb/bin:$P…...

百度CTO王海峰:文心一言用户规模破1亿

“文心一言用户规模突破1亿。”12月28日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&#xff0c;王海峰以《文心加飞桨&#xff0c;翩然赴星河》为题作了主旨演讲&#xff0c;分享了飞桨和文…...

简单最短路径算法

前言 图的最短路径算法主要包括&#xff1a; 有向无权图的单源最短路径 宽度优先搜索算法&#xff08;bfs&#xff09; 有向非负权图的单源最短路径 迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 有向有权图的单源最短路径 贝尔曼福特算法&#xff08;Bellman-Ford&#…...

答案解析——C语言—第3次作业—算术操作符与关系操作符

本次作业链接如下&#xff1a; C语言—第3次作业—算术操作符与关系操作符 1.在C语言中&#xff0c;表达式 7 / 2 的结果是多少&#xff1f; - A) 3.5 - B) 3 - C) 4 - D) 编译错误 答案&#xff1a;B) 3 解析&#xff1a; 在C语言中&#xff0c;当两个整数进行除法运算时&…...

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种&#xff0c;在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义&#xff1a;二叉树的创建&#xff1a;二叉树的遍历&#xff1a;前序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 二叉树节点个数…...

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…...

tomcat、java、maven

JDK&#xff5c;JRE Tomcat官网介绍的更清楚 Java 环境安装 安装 wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u392-b08/openlogic-openjdk-8u392-b08-linux-x64.tar.gz tar -xf openlogic-openjdk-8u392-b08-linux-x64.tar.gz mv openlogic-openjdk…...

IDEA好用插件

CodeGlance Pro 右侧代码小地图 Git Commit Template git提交信息模板 IDE Eval Reset 无限试用IDEA Maven Helper 图形化展示Maven项 One Dark theme 好看的主题 SequenceDiagram 展示方法调用链 Squaretest 生成单元测试 Translation 翻译 Lombok lombok插件…...

面试官:CSS3新增了哪些新特性?

面试官&#xff1a;CSS3新增了哪些新特性&#xff1f; 一、是什么 css&#xff0c;即层叠样式表&#xff08;Cascading Style Sheets&#xff09;的简称&#xff0c;是一种标记语言&#xff0c;由浏览器解释执行用来使页面变得更美观 css3是css的最新标准&#xff0c;是向后兼…...

Vite5 + Vue3 + Element Plus 前端框架搭建

为了开发一套高效使用的 Vite5 + Vue3 + Element Plus 前端框架,你可以按照以下步骤进行。话不多说,先上演示地址:Vue Shop Vite。 1, 安装开发环境 开发之前,确保你的电脑已经安装了 Node.js(建议使用最新稳定版 LTS),然后安装 Vite CLI。在命令行中运行以下命令: …...

STM32 内部 EEPROM 读写

STM32 的某些系列 MCU 自带 EEPROM。笔者使用的 STM32L151RET6 自带 16 KB 的 EEPROM&#xff0c;可以用来存储自定义的数据。在芯片选型时&#xff0c;自带 EEPROM 也可以作为一个考量点&#xff0c;省去了在外接 EEPROM 的烦恼。 下面简单介绍下 STM32 内部 EEPROM 的读写流…...

androidStudio sync failed GradlePropertiesModel (V2)

大家在增加模块的时候经常遇到吧&#xff1f;重启后就好了。 Cannot get GradlePropertiesModel (V2) for project ‘GradleProject{path’:app’}’ 然而&#xff0c;今天开机以后&#xff0c;无论如何&#xff0c;点击gradle的大象图标(Sync Project with Gradle Files)&…...

结构方程模型(SEM)

结构方程模型&#xff08;Structural Equation Modeling&#xff09;是分析多变量间因果关系的利器&#xff0c;在众多学科领域具有巨大应用潜力。我们前期推出的《基于R语言结构方程模型》课程通过结构方程原理介绍、结构方程全局和局域估计、模型构建和调整、潜变量分析、复合…...

基于UDP的网络编程

UDP服务端 #ifdef _WIN32 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define close closesocket #include <winsock2.h> #else #include <arpa/inet.h> #include <netdb.h> #include <netinet/in.h> #in…...

vue判断组件有没有传入的slot有就渲染slot没有就渲染内部节点

GPT4国内站点&#xff1a;海鲸AI 在 Vue 中&#xff0c;你可以使用 $slots 对象来检查是否有特定的插槽内容被传递给组件。Vue 3 中的 $slots 是一个对象&#xff0c;其中包含了所有插槽的引用。如果插槽没有内容&#xff0c;对应的插槽属性将会是 undefined。 下面是一个例子…...

MS713/MS713T:CMOS 低压、4Ω四路单刀单掷开关,替代ADG713

产品简述 MS713/MS713T 是一款单芯片 CMOS 4 路可选择开关&#xff0c;具有低 功耗、高开关速度、低导通阻抗、低漏电和高带宽特性。其工作 电压范围是 1.8V 到 5.5V &#xff0c;可以广泛应用在电池供电仪器仪表、新 一代的模数转换和数模转换系统中。其高带宽特性可用在 …...

Android 内容生成pdf文件

1.引入itext7 implementation com.itextpdf:itext7-core:7.1.13上面比较大&#xff0c;可以直接下载需要集成的jar包 implementation files(libs\\layout-7.1.13.jar) implementation files(libs\\kernel-7.1.13.jar) implementation files(libs\\io-7.1.13.jar) implementatio…...

Javaweb-日程管理

094.日程管理第二期_准备数据库和实体类_哔哩哔哩_bilibili navicat 下载 学生认证: Navicat 教育版 - 学生许可证 | Navicat navicat连接mysql 使用navicat连接mysql数据库创建数据库、表、转储sql文件&#xff0c;导入sql数据_哔哩哔哩_bilibili...

SwiftUI之深入解析如何创建一个灵活的选择器

一、前言 在 Dribbble 上找到的设计的 SwiftUI 实现时&#xff0c;可以尝试通过一些酷炫的筛选器扩展该项目以缩小结果列表。筛选视图将由两个独立的筛选选项组成&#xff0c;两者都有一些可选项可供选择。但是&#xff0c;在使用 UIKit 时&#xff0c;总是将这种类型的视图实…...

【模拟量采集1.2】电阻信号采集

【模拟量采集1.2】电阻信号采集 1 怎么测&#xff1f;2 测输入电阻电压即转为测模拟电压值&#xff0c;这里需要考虑选用怎样的辅助电阻&#xff1f;3 实际电路分析3.1 在不考虑 VCC-5V 电压的纹波等情况时&#xff08;理想化此时输入的 VCC 就是稳定的 5V&#xff09;3.2 若考…...

c++牛客总结

一、c/c语言基础 1、基础 1、指针和引用的区别 指针是一个新的变量&#xff0c;指向另一个变量的地址&#xff0c;我们可以通过这个地址来修改该另一个变量&#xff1b; 引用是一个别名&#xff0c;对引用的操作就是对变量本身进行操作&#xff1b;指针可以有多级 引用只有一…...

ts相关笔记(基础必看)

推荐一下小册 TypeScript 全面进阶指南&#xff0c;此篇笔记来源于此&#xff0c;记录总结&#xff0c;加深印象&#xff01; 另外&#xff0c;如果想了解更多ts相关知识&#xff0c;可以参考我的其他笔记&#xff1a; vue3ts开发干货笔记TSConfig 配置&#xff08;tsconfig.…...

Docker随笔

OverView 为什么需要Docker 如果我需要部署一个服务&#xff0c;那么我需要提前部署其他应用栈&#xff0c;不同的应用栈会依赖于不用的操作系统和环境。这样做会产生一些负面影响&#xff1a; 不同版本依赖较长的部署时间不同的Dev/Test/Prod环境 这时我们需要一个工具去解…...

网站建设优化重庆/百度产品推广

内建函数 标识id 返回对象的唯一标识&#xff0c;CPython返回内存地址 哈希hash 返回一个对象哈希 类型type 返回对象的类型 类型转换 float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray() 输入 input([prompt]) 接收用户输入&…...

加强网站硬件建设/网站seo怎么做

结束了前面的《Spring 源码深度学习》&#xff0c;八月给自己放松了一下&#xff0c;看了几本小说和电视剧&#xff0c;还有写一个工作中用到的小工具&#xff0c;周报数据渲染的前端界面&#xff08;前端是真的难&#xff09;。 当然技术上的学习也要注意&#xff0c;所以看了…...

外链代发平台/seo推广收费标准

2019独角兽企业重金招聘Python工程师标准>>> Linux在安装好之后通常SELinux都是出于默认开启的状态&#xff0c;开启的情况下会导致一些服务的安装不成功。 在不需要的情况下完全可以关闭掉,下面是在centos 7.0里面如何查看&#xff0c;关闭selinux。 查看selinux状…...

wordpress 数据库替换/整合网络营销公司

【题目描述】 目前正是新冠肺炎COVID-19盛行时期&#xff0c;为了更好地进行分流治疗&#xff0c;医院在挂号时要求对病人的体温和干咳情况进行检查&#xff0c;对于体温超过37.5度&#xff08;含等于37.5度&#xff09;并且干咳的病人初步判定为新冠肺炎COVID-19病人&#xf…...

wordpress 做的商城/东莞做网站的公司吗

前言 &#xff1a; 1、 Git是目前世界上最先进的分布式版本控制系统 Git是一个分布式版本控制系统&#xff0c;简单来说就是一个软件用于记录一个或若干文件内容变化&#xff0c;以便于将来查阅特定版本修订情况的软件 2、 Github是一个为用户提供git服务的网站&#xff0c;简单…...

医疗网站跳出率平均是多少/关键词排名优化技巧

高级可持续威胁(APT)的名字听上去的确很了不起&#xff0c;似乎有关它的一切一定很高端&#xff0c;很复杂。但最近的一份分析报告却显示&#xff0c;有些APT攻击其技术含量还不比不上普通的恶意软件。 “这有点违反普通人的直觉&#xff0c;大部分人都被好莱坞电影错误的引导了…...