IOC操作Bean管理(基于注解方式)

news2024/10/2 1:34:28

 IOC 控制反转,把创建对象过程交给Spring进行管理。

目录

什么是注解

Bean 管理注解方式(创建对象)

基于注解方式实现对象创建

第一步:引入依赖 

第二步:开启组件扫描

创建类,在类上面添加创建对象注解(下面三个都可以)

Bean管理注解方式(组件扫描细节配置)

基于注解方式实现属性注入(注入属性@)

@AutoWired :根据属性类型进行自动装配;

@Qualifer :根据属性名称进行注入

@Resource :可以根据类型注入,可以根据名称注入

@Value :注入普通类型属性

 完全注解开发


 Bean 管理

 Bean 管理操作有两种方式

         第一种:基于xml配置文件方式实现

         第二种:基于注解方式实现

 基于xml配置文件方式实现可以看下面的文章

IOC 的底层原理和Bean管理XML方式、xml注入集合属性

Bean 管理(工厂bean)

ICO操作Bean管理的(bean的作用域和生命周期)

Bean 管理XmL方式(自动装配和外部属性文件)

话不多说,正式进入Bean管理的注解方式

什么是注解

  • 注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
  • 使用注解,注解作用于类上面,方法上面,属性上面
  • 使用注解目的,简化xml配置

Bean 管理注解方式(创建对象)

Spring针对Bean管理中创建对象提供注解

@Component   @Service  @Controller  @Repository

四个注解功能一样的,都可以用来创建bean实例,大多数时候会把它们写在不同层中,主要为了更好的理解不同层的业务逻辑。

基于注解方式实现对象创建

第一步:引入依赖 

第二步:开启组件扫描

通俗就是告诉spring5需要扫描某个类。

如果扫描多个包,在多个包之间使用逗号隔开;
 <context:component-scan base-package="com.atguigu.spring5.dao,com.atguigu.spring5.service"></context:component-scan>
如果是扫描同一个目录下所有的包,直接在路径中写上层目录
 <context:component-scan base-package="com.atguigu"></context:component-scan>

创建类,在类上面添加创建对象注解(下面三个都可以)

@Component   @Service  @Controller  @Repository

在注解里面的value属性值可以省略,如果省略 那它的默认值是类名称,但首字母会小写。

@Component(value = "userService") 就相当于 创建service时的路径 bean id="userService" class="..."

@Component(value = "userService")
public class UserService {
    public void add(){
        System.out.println("service add...");
    }
}

测试

  @Test
    public void testService (){
      ApplicationContext context =
              new ClassPathXmlApplicationContext("bean1.xml");
      UserService userService = context.getBean("userService",UserService.class);
      System.out.println(userService);
      userService.add();
    }

Bean管理注解方式(组件扫描细节配置)

use-default-filters="false" :表示现在不用默认Filter ,需要自己配置
context:include-filter:表示 设置扫描哪些内容
     <context:component-scan base-package="com.atguigu" use-default-filters="false">
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
     </context:component-scan>
context:exclude-filter:设置哪些内容不进行扫描;
base-package="com.atguigu" 后面没有带 use-default-filters="false" 表示扫描所有,但 context:exclude-filter:可以设置哪些不被扫描。下面就表示布扫描 Component
    <context:component-scan base-package="com.atguigu">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"/>
    </context:component-scan>

基于注解方式实现属性注入(注入属性@)

@AutoWired :根据属性类型进行自动装配;

第一步:把service和dao对象创建,在service和dao类添加创建对象注解;

第二步:在service 注入dao对象;在service类添加dao类型属性,在属性上面使用注解

@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解
    @Autowired
    private UserDao userDao;

    public void add(){
        System.out.println("service add...");
        userDao.add();
    }
}

@Qualifer :根据属性名称进行注入

这个@Qualifer注解的使用,和上面@AutoWired一起使用

@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解
    @Autowired //根据类型属性注入
    @Qualifier(value = "userDaoImpI")//根据名称注入
    private UserDao userDao;

    public void add(){
        System.out.println("service add...");
        userDao.add();
    }
}

@Resource :可以根据类型注入,可以根据名称注入

根据类型注入

    @Resource
    private UserDao userDao;

    public void add(){
        System.out.println("service add...");
        userDao.add();
    }

根据名称注入

    @Resource(name = "userDaoImpI")
    private UserDao userDao;

    public void add(){
        System.out.println("service add...");
        userDao.add();
    }

@Value :注入普通类型属性

    @Value(value = "abc")
    private String name;

 完全注解开发

创建配置类,替代xml配置文件

@Configuration  //作为配置类,替代xml 配置文件
@ComponentScan(basePackages = {"com.atguigu"})
public class SpringConfig {
}
上面代码的 @ComponentScan(basePackages = {"com.atguigu"}) 相当于 xml 文件的 <context:component-scan base-package="com.atguigu"></context:component-scan>

编写测试类

  @Test
  public void testService2 (){
    //加载配置类
    ApplicationContext context =
            new ClassPathXmlApplicationContext("bean1.xml");
    UserService userService = context.getBean("userService",UserService.class);
    System.out.println(userService);
    userService.add();
  }

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

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

相关文章

Python爬虫实战,request+Matplotlib模块,Python绘制一个足球运动员的数据可视化图表

前言 用Python和Matplotlib绘制一个足球运动员的数据可视化图表。 Let’s start happily 开发工具 Python版本&#xff1a; 3.6.4 相关模块&#xff1a; bs4模块 requests模块 pandas模块 matplotlib模块 json模块 numpy模块 环境搭建 安装Python并添加到环境变量…

Sqoop数据导入 第2关:Mysql导入数据至HDFS上

为了完成本关任务,你需要掌握: 1、数据库( MySQL )建表。 2、Mysql 数据导入至 HDFS 中。 数据库( MySQL )建表 用命令进入 MySQL 客户端。 mysql -uroot -p123123 -h127.0.0.1 创建数据库hdfsdb(格式默认为utf8),并在数据库内建立表student,其表结构如下: mys…

通过求解数学模型来选择编码节点的最佳数量和位置(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【✨十五天搞定电工基础】电阻电路的分析方法

本章要求1. 掌握支路电流法、叠加原理和戴维宁定理等电路的基本分析方法; 2. 了解实际电源的两种模型及其等效变换; 3. 了解非线性电阻元件的伏安特性及静态电阻、动态电阻的概念&#xff0c;以及简单非线性电阻电路 的图解分析法。 目录 一、电阻串并联连接的等效变换 1、…

企业如何有效的防爬虫?

防爬虫&#xff0c;简单来说&#xff0c;就是在尽量减少对正常用户的干扰的情况下尽可能的加大爬虫的成本。 而反防爬虫&#xff0c;或者说制造隐蔽性强的爬虫&#xff0c;就是尽量模拟正常用户的行为。 这两者是动态博弈的。大公司基本都有防爬的项目&#xff0c;以保护数据…

一图了解es6常用数据迭代函数map,filter,fill,reduce

一、一图胜千言 前端开发中&#xff0c;js数组处理是最常用的&#xff0c;除了for循环外&#xff0c;随着es6的普及&#xff0c;像reduce()、filter()、map()、some()、every()以及…展开属性都是最常用到的。 今天偶然从网上看到这张图&#xff0c;真是眼前一亮&#xff0c;真…

盘点JAVA中延时任务的几种实现方式

场景描述 ①需要实现一个定时发布系统通告的功能&#xff0c;如何实现&#xff1f; ②支付超时&#xff0c;订单自动取消&#xff0c;如何实现&#xff1f; 实现方式 一、挂起线程 推荐指数&#xff1a;★★☆ 优点&#xff1a; JDK原生(JUC包下)支持&#xff0c;无需引入新…

RabbitMQ之集群管理

1、在node2、node3、node4三台Linux虚拟机中安装RabbitMQ。 2、从node2拷贝.erlang.cookie到node3、node4的相应目录 如果没有该文件&#xff0c;手动创建/var/lib/rabbitmq/.erlang.cookie &#xff0c;生成Cookie字符串&#xff0c;或者启动一次RabbitMQ自动生成该文件。生产…

五年Java编程生涯,大专学历最终逆袭阿里,面试+学习+经历分享

五年时间&#xff0c;对于程序员来说&#xff0c;真的非常非常宝贵&#xff0c;掉的头发都够塞满键盘的缝隙了。就说新一代偶像 TFboys 吧&#xff0c;你应该知道这个组合吧&#xff0c;黄金合作期也就三五年的时间&#xff0c;现在基本上就处于各自单飞&#xff08;solo&#…

深度学习笔记之受限玻尔兹曼机(一)玻尔兹曼分布介绍

机器学习笔记之受限玻尔兹曼机——玻尔兹曼分布介绍引言回顾&#xff1a;Hammersley-Clifford定理玻尔兹曼分布的物理意义引言 从本节开始&#xff0c;将介绍受限玻尔兹曼机。本节将从马尔可夫随机场开始&#xff0c;介绍玻尔兹曼机分布。 回顾&#xff1a;Hammersley-Cliffo…

NCP81239MNTXG 开关降压/升压控制器,USB 功率传递和 Type-C 应用

NCP81239MNTXG USB 功率传递 (PD) 控制器是一款同步降压/升压控制器&#xff0c;适用于为笔记本电脑、平板电脑、台式系统以及很多使用 USB PD 标准和 C−Type 线缆的其他消费设备提供电池电压或适配器电压到所需电源轨的转换。结合使用 USB PD 或 C−Type 接口控制器时完全符合…

【笔记】Java - VM options、Program arguments、Environment variables、eclipse variables

java使用ide开发的时候&#xff0c;运行程序&#xff08;application&#xff09;前都要设置启动配置&#xff1a; VM options、Program arguments、Environment variables 很多时候我们是默认配置启动的&#xff0c;所以没太注意。但是如果我们有特殊需求、项目上线时&#xf…

VSCode 安装教程(超详细)

文章目录VSCode 安装使用教程&#xff08;图文版&#xff09;那么&#xff0c;什么是 IDE 呢 &#xff1f;目前&#xff0c;前端开发主流的 IDE 有以下 5 个下边我们开始玩转 VSCodeVSCode 下载、安装Window 版 VScode 安装流程1、下载 Vscode 安装文件2、下载完成单击运行&…

Postman的使用——设置全局参数,参数的传递,从登录接口的响应body中提取数据更新全局参数,从响应cookie中提取数据更新全局变量

Postman的使用——设置全局参数&#xff0c;引用全局参数&#xff0c;参数的传递&#xff0c;从登录接口的响应body中提取数据更新全局参数&#xff0c;从响应cookie中提取数据更新全局变量一、设置全局参数二、引用全局参数三、从登录接口的响应body中提取数据更新全局参数四、…

cmd命令以及一些操作

文章目录前言set和echoif语句判断有无指定文件夹相对路径创建文件夹创建bat脚本换行符前言 因为下载下来的代码用bash脚本写的&#xff0c;cmd不能完美运行&#xff0c;因此想着对照着转成cmd&#xff0c;这样就方便了。 set和echo set demohello world!!! echo %demo%这就是…

[附源码]计算机毕业设计springboot学生宿舍维修管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

动态规划——数字三角形模型

数字三角形模型&#xff1a; 给定一个如下图所示的数字三角形&#xff0c;从顶部出发&#xff0c;在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点&#xff0c;一直走到底层&#xff0c;要求找出一条路径&#xff0c;使路径上的数字的和最大。 输入格式&#…

力扣 895. 最大频率栈

题目 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除并返回堆栈中出现频率最高的元素。 如果出现…

傻妞旧版本(合集)

目录一、前言二、下载三、新版傻妞订阅合集一、前言 傻妞旧版本(合集),包含amd和arm版本 二、下载 &#x1f170;️amd✅还未大改&#xff0c;init web未出 &#x1f534;[sillyGirl_amd_2022-08-05] ➡️百度网盘 ➡️天翼云盘&#xff08;访问码&#xff1a;ha8s&#xff09…

如何开通小程序?开通小程序要钱吗?

关于如何开通小程序&#xff1f;开通小程序要钱吗&#xff1f;这两个问题&#xff0c;今天给大家做一个简单的解答。 一、如何开通小程序&#xff1f; “开通小程序”这个说法其实并不准确&#xff0c;能开通的是小程序账号&#xff0c;开通完小程序账号后还需要去制作小程序&…