Spring IOC的相关注解运用详解

 更新时间:2023年08月09日 09:33:23   作者:会洗碗的CV工程师  
这篇文章主要介绍了Spring IOC的相关注解运用详解,纯注解实现IOC需要一个Java类代替xml文件,这个Java类上方需要添加@Configuration,表示该类是一个配置类,作用是代替配置文件,需要的朋友可以参考下

一、@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;
        }
    }

4. 测试

测试方法

    // 测试注解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的学习就到这里了。

到此这篇关于Spring IOC的相关注解运用详解的文章就介绍到这了,更多相关Spring IOC注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java编程实现基于用户的协同过滤推荐算法代码示例

    Java编程实现基于用户的协同过滤推荐算法代码示例

    这篇文章主要介绍了Java编程实现基于用户的协同过滤推荐算法代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java受检异常的一些思考

    Java受检异常的一些思考

    受检异常是否真的有必要?这是一个争论了很久的问题,至今仍然没有一个确定的答案。Java的受检异常,被很多人吐槽,也被很多人喜爱,当然他们都可以拿出很多的理由来证明自己的观点。
    2020-12-12
  • Java中与数字相关的常用类的用法详解

    Java中与数字相关的常用类的用法详解

    在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等,为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类等等,本篇文章我们先从Number数字类和Math数学类学起
    2023-05-05
  • Java多线程环境下SimpleDateFormat类安全转换

    Java多线程环境下SimpleDateFormat类安全转换

    这篇文章主要介绍了Java多线程环境下SimpleDateFormat类安全转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • SpringBoot深入探究@Conditional条件装配的使用

    SpringBoot深入探究@Conditional条件装配的使用

    这篇文章主要为大家介绍了SpringBoot底层注解@Conditional的使用分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • IDEA手动添加junit4时出现的问题与解决方法

    IDEA手动添加junit4时出现的问题与解决方法

    这篇文章主要给大家介绍了关于IDEA手动添加junit4时出现的问题与解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • SpringBoot对Filter过滤器中的异常进行全局处理方案详解

    SpringBoot对Filter过滤器中的异常进行全局处理方案详解

    这篇文章主要介绍了SpringBoot对Filter过滤器中的异常进行全局处理,在SpringBoot中我们通过 @ControllerAdvice 注解和 @ExceptionHandler注解注册了全局异常处理器,需要的朋友可以参考下
    2023-09-09
  • Java中@valid和@Validated注解的使用详解

    Java中@valid和@Validated注解的使用详解

    这篇文章主要介绍了Java中@valid和@Validated注解的使用详解,@Validated可以用在类型、方法和方法参数上,但是不能用在成员属性(字段)上,不支持嵌套检测,@Valid可以用在方法、构造函数、方法参数和成员属性(字段)上,支持嵌套检测,需要的朋友可以参考下
    2024-01-01
  • Java实现文件上传保存

    Java实现文件上传保存

    这篇文章主要为大家详细介绍了Java实现文件上传保存,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 关于任务调度框架quartz使用(异常处理,解决恢复后多次调度处理)

    关于任务调度框架quartz使用(异常处理,解决恢复后多次调度处理)

    这篇文章主要介绍了关于任务调度框架quartz使用(异常处理,解决恢复后多次调度处理),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论