Spring IOC容器Bean对象管理-注解方式

目录

1、Bean对象常用注解介绍

2、注解示例说明


1、Bean对象常用注解介绍

  1. @Component 通用类组件注解,该类被注解,IOC容器启动时实例化此类对象
  2. @Controller 注解控制器类
  3. @Service 注解业务逻辑类
  4. @Respository 注解和数据库操作的类,如DAO类
  5. @Resource 装配注解,优先按名称装配,如果名称匹配不上,则按照类型匹配
  6. @Autowired 装配注解,按类型装配(Spring 内置)
  7. @Inject 装配注解,按类型装配(JSR-330标准)
  8. @PostConstruct 方法注解,功能参考xml文件中的init-method,在实例化对象后自动执行
  9. @Scope Bean属性注解,功能参考xml文件中的Scope属性,非WEB环境有多例和单例两种,注解不写value或者不写此注解的情况下,默认是单例
  10. @Value 属性注解,为Bean对象注入静态数据,通常属性注入的值来自某个配置文件

2、注解示例说明

IOC容器注解方式配置Bean需要如下步骤:

1、applicationContext.xml加入扫描的包,此包项下的类被IOC容器扫描,如有注解,则实例化对象

    <!-- 扫描注解包--><context:component-scan base-package="com.text"/><!-- 加载配置文件 --><context:property-placeholder location="classpath:config.properties"/>

        配置文件config.properties(示例jdbc连接)                

jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx

 2、配置Bean注解

package com.text.dao.impl;
import com.text.dao.StudentDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@Repository
@Scope("prototype") //多例,只是程序模拟,实际项目上大部分是单例
public class StudentDaoImpl implements StudentDao {@Value("${jdbc.url}")private String url;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}
}
package com.text.service.impl;
import com.text.dao.StudentDao;
import com.text.service.StudentService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class StudentServiceImpl implements StudentService {/*** @Resource 注解后,先从容器中找bean名称=studentDao的对象,没找到(系统中实例对象名称是studentDaoImpl)* 再通过类型StudentDao寻找,找到studentDaoImpl,注入到studentServiceImpl对象中* 由于studentDao是私有属性,IOC容器会通过反射技术将studentDao改为puclic属性(修改modifier值),* 然后赋值,赋值后再次将studentDao设置私有属性;此种方式和xml中的property的方式不同,property的方式是通过* 反射调用SetStudentDao方法实现注入*/@Resourceprivate StudentDao studentDao;public StudentDao getStudentDao() {return studentDao;}public void setStudentDao(StudentDao studentDao) {this.studentDao = studentDao;}
}

测试类:

package com.text.entity;import com.text.dao.StudentDao;
import com.text.dao.impl.StudentDaoImpl;
import com.text.service.impl.StudentServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {String configLocation = "classpath:applicationContext.xml";ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);System.out.println("==========IOC容器完成初始化==========");String[] beanDefinitionNames = context.getBeanDefinitionNames();for(String beanDefinitionName:beanDefinitionNames) {System.out.println(beanDefinitionName);//studentDaoImpl  studentServiceImpl}StudentDao studentDao1 = context.getBean("studentDaoImpl", StudentDao.class);StudentServiceImpl studentService = context.getBean("studentServiceImpl", StudentServiceImpl.class);StudentDao studentDao2 = studentService.getStudentDao();System.out.println(studentDao1 == studentDao2);//false,studentDaoImpl scope=多例StudentDaoImpl studentDao3 = (StudentDaoImpl)studentService.getStudentDao();System.out.println(studentDao3.getUrl());//jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx}
}

 特别说明:

@Resource 注解StudentServiceImpl 后,先从容器中找bean名称=studentDao的对象,没找到(系统中实例对象名称是studentDaoImpl)再通过类型StudentDao寻找,找到studentDaoImpl,注入studentServiceImpl对象的studentDao属性中,由于studentDao是私有属性,IOC容器会通过反射技术将studentDao改为puclic属性(修改modifier值),然后赋值,赋值后再次studentDao设置私有属性;此种方式和xml中的property的方式不同,property的方式是通过反射调用SetStudentDao方法

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

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

相关文章

PMP--二模--解题--11-20

文章目录 14.敏捷--实践--每日站会--团队成员利用每日站会对彼此做出小的承诺&#xff0c;发现问题&#xff0c;并确保团队工作顺利进行。&#xff08;不是项目经理说&#xff0c;是团队成员&#xff09;11、 [单选] 在每日站会上&#xff0c;项目经理与团队成员逐个交流&#…

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…

口哨声、歌声、boing声和biotwang声:用AI识别鲸鱼叫声

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

web基础—dvwa靶场(八)XSS

XSS(DOM) 跨站点脚本&#xff08;XSS&#xff09;攻击是一种注入攻击&#xff0c;恶意脚本会被注入到可信的网站中。当攻击者使用 web 应用程序将恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;发送给其他最终用户时&#xff0c;就会发生 XSS 攻击。允许这些攻击成…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第五集:再制作更多的敌人

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作敌人另个爬虫Crawler 1.公式化导入制作另个爬虫Crawler素材2.制作另个爬虫Crawler的Crawler.cs状态机3.制作敌人另个爬虫Crawler的playmaker状态机二、…

大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元

Sysdig 威胁研究团队 (TRT) 报告称&#xff0c;LLMjacking&#xff08;大型语言模型劫持&#xff09;事件急剧增加&#xff0c;攻击者通过窃取的云凭证非法访问大型语言模型 (LLM)。 这一趋势反映了 LLM 访问黑市的不断增长&#xff0c;攻击者的动机包括个人使用和规避禁令和制…

DNS服务

一.DNS介绍 DNS应用层协议 Domain Name System 域名系统 作用&#xff1a;实现域名解析&#xff0c;解析主机名所对应的IP地址&#xff0c; 在网络环境中设备与设备之间要想相互通信只能依赖IP地址&#xff0c;DNS服务器的作用是实现域名解析。 如上图所示&#xff0c;DNS存…

英飞凌 PSoC6 RT-Thread 评估板简介

概述 2023年&#xff0c;英飞凌&#xff08;Infineon&#xff09;联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 &#xff08;以下简称 PSoC 6 RTT 开发板&#xff09;&#xff0c;该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…

Matplotlib | 一文搞定Matplotlib从入门到实战演练!

文章目录 1 什么是Matplotlib1.1 Matplotlib的安装1.2 Matplotlib的基本使用 2 绘制直线3 绘制折线设置标签文字和线条粗细设置中文标题风格的设置 4 绘制曲线绘制曲线yx^2绘制正弦曲线和余弦曲线画布分区 5 绘制散点图绘制不同种类不同颜色的线 6 绘制条形图&#xff08;柱状&…

计算机网络 ---- OSI参考模型TCP/IP模型

目录 一、OSI参考模型 1.1 学习路线 1.2 OSI参考模型和TCP/IP模型 1.3 具体设备与具体层次对应关系 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1.3.4 传输层 1.3.5 会话层、表示层、应用层 1.4 各层次数据传输单位 二、TCP/IP模型 2.1 学习路线 2.2 TCP/I…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽

【Django5】django的helloworld

安装django pip install djangoDjango官方中文文档 https://docs.djangoproject.com/zh-hans/5.1/Github链接 https://github.com/django/django创建Django项目 cd到想要创建项目的文件夹下&#xff0c;输入以下命令创建项目 这行代码将会在当前目录下创建一个 mysite 目录 …

9月26日云技术研讨会 | SOA整车EE架构开发流程及工具实施方案

面向服务的架构&#xff08;Service Oriented Architecture, SOA&#xff09;实施需要复杂的基础技术作为支撑&#xff0c;伴随着整车硬件资源的集中化、车载以太网等高速通信技术在车内的部署&#xff0c;将在未来一段时间内成为行业技术研究和市场布局的热点。 近年来&#x…

AD域控服务器

1.AD域控服务器安装 2.客户端Windows10加入域环境 3.组织单位OU和域用户创建 目的是分部门管理用户和使用域用户登录客户端 4.域用户安全策略 5.当客户端密码锁住了,管理员解锁账户。 6.只允许域用户使用自己的电脑 7.域策略 7.1统一客户端桌面壁纸 7.2重定向用户配置文件路径…

【macOS】【zsh报错】zsh: command not found: python

【macOS】【zsh Error】zsh: command not found: python 本地已经安装了Python&#xff0c;且能在Pycharm中编译Python程序并运行。 但是&#xff0c;在macOS终端&#xff0c;运行Python&#xff0c;报错。 首先要确认你在macOS系统下&#xff0c;是否安装了Python。 如果安…

每日刷题(算法)

我们N个真是太厉害了 思路&#xff1a; 我们先给数组排序&#xff0c;如果最小的元素不为1&#xff0c;那么肯定是吹牛的&#xff0c;我们拿一个变量记录前缀和&#xff0c;如果当前元素大于它前面所有元素的和1&#xff0c;那么sum1是不能到达的值。 代码&#xff1a; #def…

ElK 8 收集 Nginx 日志

1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 nginx 有 nginx 可以直接使用。我这里是在之前环境下 docker-compose.yml 中启动了个 nginx&#xff1a; nginx:restart: alwaysimage: nginx:1.26.1ports:- "80:80"- "443:443"volumes:#- ./nginx/html:/…

Eigen3 教程基础篇(三)

参考 Eigen3 主页&#xff0c;Eigen3 官网教程 矩阵的本质&#xff0c;通过多种矩阵的应用去感受矩阵本质 3Blue1Brown 的线性代数&#xff0c;用可视化方法来表现线性代数的特性&#xff0c;强推 如何理解复数和虚数&#xff0c;有动画方便理解复数的意义 相关文章 Eigen…

《ElementUI/Plus 踩坑》el-table + sortablejs 拖拽顺序错乱(Vue2/3适用)

如图所示&#xff1a; 把第一行拖到最后一行&#xff0c;鼠标up&#xff1b;该行莫名其妙的跳到倒数第二行&#xff1b; 最后发现没有设置 el-table 属性 row-key &#xff0c;即行数据的 Key&#xff0c;用来优化 table 的渲染&#xff1b; 属性 row-key 描述如下&#xf…

YOLOv10轻量化快速涨点之改进AKConv

目录 1,什么是AKConv? 2,如何使用AKConv使YOLOv10快速长点? 2.1,在ultralytics-main/ultralytics/nn/modules/conv.py里面添加AKConv类 2.2,ultralytics-main/ultralytics/nn/modules/conv.py添加如下 2.3 在E:\czc\YOLOv10\ultralytics-main\ultralytics\nn\tasks.p…