Spring IOC相关注解运用——下篇

news2024/11/25 18:26:00

目录

一、@Configuration

二、@ComponentScan

1. 说明

2. 测试方法

3. 运行结果

三、@PropertySource

1. 说明

2. 测试方法

3. 测试结果

四、@Bean

1. 说明

2. 添加驱动依赖

3. 将Connection对象放入Spring容器

3. 测试

五、@Import

1. 说明

2. 测试方法

3. 运行结果

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章 


一、@Configuration

    此时基于注解的IOC配置已经完成,但是我们依然离不开Spring的xml配置文件。接下来我们脱离bean.xml,使用纯注解实现IOC。

        在真实开发中,我们一般还是会保留xml配置文件,很多情况下使用配置文件更加方便。
    纯注解实现IOC需要一个Java类代替xml文件。这个Java类上方需要添加@Configuration,表示该类是一个配置类,作用是代替配置文件。

SpringConfig配置类 

package com.example;

import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

}

二、@ComponentScan

1. 说明

作用:指定spring在初始化容器时扫描的包。
位置:配置类上方

SpringConfig配置类 

package com.example;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example")
public class SpringConfig {

}

2. 测试方法

    // 测试纯注解
    @Test
    public void t4(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        StudentService service = ac.getBean("studentService",StudentService.class);
        System.out.println(service.findById(8));
    }

3. 运行结果

OK,确实可以。 

三、@PropertySource

1. 说明

作用:代替配置文件中的 <context:property-placeholder> 扫描配置文件
位置:配置类上方
注意:配置文件位置前要加关键字 classpath

JdbcConfig配置类 

package com.example;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.sql.Connection;
import java.sql.DriverManager;

@Configuration
@PropertySource("classpath:db.properties")
public class JdbcConfig {

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;


    @Override
    public String toString() {
        return "JdbcConfig[ " +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                " ]";
    }
}

2. 测试方法

    // 测试纯注解扫描jdbc
    @Test
    public void t5(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(JdbcConfig.class);
        JdbcConfig config = (JdbcConfig) ac.getBean("jdbcConfig");
        System.out.println(config);
    }

3. 测试结果

 

OK,也是没有问题的。 

四、@Bean

1. 说明

  • 作用:将方法的返回值对象放入Spring容器中。如果想将第三方类的对象放入容器,可以使用@Bean
  • 位置:配置类的方法上方。
  • 属性:name:给bean对象设置id
  • 注意:@Bean修饰的方法如果有参数,spring会根据参数类型从容器中查找可用对象。
  • 举例:如果想将jdbc连接对象放入Spring容器,我们无法修改Connection源码添加@Component,此时就需要使用将@Bean该对象放入Spring容器

2. 添加驱动依赖

在pom.xml文件添加依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>

3. 将Connection对象放入Spring容器

    @Bean("connection")
    public Connection getConnection(){
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql:///mysql","root","666666");
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

3. 测试

测试方法

    // 测试注解bean
    @Test
    public void t6(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        Connection connection = (Connection) ac.getBean("connection");
        System.out.println(connection);
    }

运行结果

OK,也是可以成功获取连接的 

五、@Import

1. 说明

作用:如果配置过多,会有多个配置类,该注解可以为主配置类导入其他配置类
位置:主配置类上方

上述我们讲的,SpringConfig应当为主配置类,所以该注解应当添加在SpringConfig类的上方

package com.example;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;


@Configuration
@ComponentScan("com.example")
@Import(JdbcConfig.class)
public class SpringConfig {

}

2. 测试方法

    // 测试纯注解
    @Test
    public void t4(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        JdbcConfig jdbcConfig = ac.getBean("jdbcConfig",JdbcConfig.class);
        System.out.println(jdbcConfig);
    }

3. 运行结果

        OK,确实也是可以获取的。说明主配置类成功导入了。本章Spring IOC的学习就到这里了。 

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章 

Spring系列专栏Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

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

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

相关文章

从一道go逆向出发,讨论类tea的逆算法

tea代码很短&#xff0c;经常被直接复制为源码&#xff08;而不是像标准算法那样调库&#xff09;。在ctf逆向中也算比较常见&#xff0c;复杂度适中。 例题是一道go逆向&#xff0c;经go parser处理后&#xff0c;核心代码如下图。 panic算是go的专有名词&#xff0c;类似异常…

吃透 Spring AOP (1.理解概念)

理解 什么是AOP AOP&#xff0c;全称面向切面编程。 它可以说是对面向对象OOP的思想升华。从总的理解来讲&#xff0c;AOP是横向对不同程序的抽象。这个思想要不断实践动手之后&#xff0c;才会有很深刻的理解 理解 代理模式 在理解AOP之前&#xff0c;我们首先要单独说一个…

FFMPEG录屏(16)--- MAG(Magnification)捕获桌面

最近增加了对Magnification API捕获桌面的支持&#xff0c;记录一下过程和其中遇到的问题。 参考资料 Magnification API overview Magnification API sample webrtc screen_capturer_win_magnifier.cc Structured Exception Handling (C/C) 前言 我又不得不吐槽一下了&a…

【JavaWeb】-- HTTP、Tomcat、Servlet

文章目录 HTTP1.简介2.请求数据格式2.2.1 格式介绍 3.响应数据格式3.1 格式介绍3.2 响应状态码 Tomcat1.简介1.1 什么是Web服务器 2.基本使用2.1 安装2.2 启动2.3 关闭 3.Maven创建Web项目4.IDEA使用Tomcat4.1集成本地Tomcat4.2 Tomcat Maven插件 Servlet1.简介2.快速入门3.执行…

okhttp篇3:RealCall

Call Call一般代表一个已经准备好的Request&#xff0c;Request的包装类&#xff0c;可执行&#xff0c;它一般有两个主要的方法&#xff1a; execute(立即执行&#xff0c;并阻塞线程&#xff0c;直到Response返回)enqueue(将Request放入队列&#xff0c;等待线程池调度执行…

spring源码学习_01 本地环境搭建

参考网上各种资源&#xff0c;终于把spring源码运行起来了&#xff1b;步骤总结如下&#xff1a; spring版本&#xff1a; 5.2.x 本地系统mac idea 2019.3.2 下载地址&#xff1a;https://www.jetbrains.com/idea/download/other.html jdk 11 下载地址&#xff1a;https://repo…

【设计模式二十三剑】✨编写更高质量代码的秘诀✨

文章目录 ✨✨简述&#x1f386;【万能之门】简单工厂模式&#xff08;Simple Factory&#xff09;&#x1f387;【制造之剑】工厂方法模式&#xff08;Factory Method&#xff09;&#x1f387;【生产之剑】抽象工厂模式&#xff08;Abstract Factory&#xff09;&#x1f387…

C语言基础知识:函数的调用

函数的定义 一般来说&#xff0c;执行源程序就是执行主函数main&#xff0c;其他函数只能被主函数所调用&#xff0c;而其他函数之间也可以相互调用。 1.标准库函数&#xff1a; 分为&#xff1a;I/O函数&#xff0c;字符串&#xff0c;字符处理函数&#xff0c;数学函数&am…

Go语言的函数和defer用法

目录 函数的基本用法 函数中的变长参数 递归函数(recursion) 函数是“一等公民” 函数中defer的用法 defer的底层原理 使用 defer 跟踪函数的执行过程 defer的注意事项 &#xff08;1&#xff09;Go语言内置的函数中哪些可以作为deferred 函数 &#xff08;2&#xf…

面试code(1)—— 排序算法

算法动画 从小到大排序 1 冒泡排序 被动的将最大值送到最右边 1、比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 2、对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。这步做完后&#xff0c;最后的元素会是最大的数。 3、针对…

Redis修炼 (17. redis主从集群的数据同步原理 全量同步/增量同步)

数据同步 在一个集群之中 数据同步是很重要的。 redis的集群有多种。 我们这次主要说 主从集群。 全量同步 既然是主从集群 那么肯定是 1个master节点 多个从节点。redis的集群中的第一次同步 我们叫 全量同步&#xff1a; 为什么要强调第一次&#xff1f; 因为如果你是第一…

独家策略大放送:最高年化150%的策略,谁不感兴趣?(含免费版)

上一节我们在沪深300中回测了550中均线交叉策略,有朋友想看看这些策略在沪深300以外的中小市场表现如何,同时大家都非常好奇表现抢眼的老Q自研指标WMA_Q系列到底是怎么计算的。 于是老Q又选择了中证500和创业板指来验证下这些策略是否能有同样的表现(PART 1),顺便在今天的…

流水线中的握手信号笔记

1.《握手信号的打拍(一)》 解释了&#xff0c;为什么在流水线中&#xff0c;握手信号不能简单得加一级寄存器 业界关于流水线级握手信号的标准答案是 skid buffer&#xff0c;此外还有人提到了 Register slice 2.《握手信号的打拍(二)》 为什么简单加一级寄存器会握手失败 &…

抖音SEO系统源码开发搭建/MVC二次开发定制

首先&#xff0c;抖音SEO矩阵系统源码开发&#xff0c;如何做独立部署&#xff0c;首先我们需要深刻理解这个系统的开发逻辑是什么&#xff1f;开发的前言是在抖音平台做流量新增&#xff0c;现在抖音及各大主流短视频平台&#xff0c;流量新增&#xff0c;各大企业需要在短视频…

Redis BigKey

Redis BigKey 一 面试题引入二 MoreKey案例2.1 大批量往redis里面插入2000W测试数据key2.1.1 Linux Bash下执行&#xff0c;插入100W2.1.2 通过redis提供的管道 --pipe命令插入100W大批量数据 2.2 key *2.3 生产上如何限制keys*/flushdb/flushall等危险命令以防止误删误用&…

我们在操作自动化测如何实现用例设计实例

在编写用例之间&#xff0c;笔者再次强调几点编写自动化测试用例的原则&#xff1a; 1、一个脚本是一个完整的场景&#xff0c;从用户登陆操作到用户退出系统关闭浏览器。 2、一个脚本脚本只验证一个功能点&#xff0c;不要试图用户登陆系统后把所有的功能都进行验证再退出系统…

【结构体-位段】

位段 在结构体中&#xff0c;以位为单位的成员&#xff0c;咱们称之为位段(位域)。 struct packed_data{unsigned int a:2;unsigned int b:6;unsigned int c:4;unsigned int d:4;unsigned int i; } data;注意&#xff1a;不能对位段成员取地址。 #include<stdio.h>str…

5.名词复数、动词规则、代词、形容词、副词(不包含不规则)

目录 一、 名词、动词、代词、形容词、副词五种的规则变化。 &#xff08;1&#xff09;名词。 &#xff08;1.1&#xff09;名词复数变化。 &#xff08;1.2&#xff09;名词所有格。 &#xff08;2&#xff09; 动词变化规则。 &#xff08;3&#xff09;代词。 &…

C语言-double和float在内存中的存储方式

本文主要介绍double和float数据类型在C语言中的存储方式 文章目录 double和float存储方式介绍如何存储&#xff1f; double和float存储方式介绍 从存储结构和算法上来讲&#xff0c;double和float是一样的&#xff0c;不一样的地方仅仅是float是32位的&#xff0c;double是64位…

【CAN卡通信的下位机-STM32cubeIDE-hal库+STMF1xx和STMF4xx+数据发送和接收+轮询接收方式+基础样例(1)】

【CAN卡通信的下位机-STM32cubeIDE-hal库数据发送和接收轮询接收方式基础样例1】 1、概述2、实验环境3、自我总结与提升(1)道理学习了一堆&#xff0c;如何使用STM32进行can的收发的话&#xff0c;配置还是挺简单。(2)自己实现了can的收发后&#xff0c;要反过来&#xff0c;补…