长生的梦呓


  • 归档
  • 算法
  • 基础
  • 关于

  • 分类
  • 日志
  • Servlet
  • Archive
  • 数据结构
  • IO 流

  • 标签
  • 友链
  • MyBatis
  • About
  • Spring 5
  • Java SE
  • Java EE
  • Algorithms
  • 新特性
  • 位运算技巧

  • 搜索
内网穿透 项目实战 数据库 MySQL 安卓踩坑 开发工具 设计模式 Enum 枚举 Linux MyBatis-plus JSON IDEA Transactions AOP IO 流 DP IoC 与 DI 位运算技巧 工具类 学习技巧 Git JDK 排序 Spring Boot Spring MVC Spring Framework MyBatis Log4J Regex Jsoup JDBC 数据结构 递推 递归 算法 Servlet与JSP 小难 中等 简单

【Spring】(5)IoC - 基于Java的容器配置

发表于 2020-04-05 | 1 | 阅读次数 323

前言

在之前,我们都是使用xml进行Spring的配置。

该篇文章将使用Java注解的方式,实现Spring 的配置。

一、基于Java的容器配置

项目结构:

在这里插入图片描述

User 类

public class User {
}

AppConfig 类。注解:==@Configuration、@ComponentScan、@Import==

/**
 * 注解 @Configuration 相当于:<beans></beans>
 * 解释:@Configuration 就相当于我们之前定义的beans.xml。
 * 注解 @ComponentScan(basePackages = "com.acme") 相当于:<context:component-scan base-package="com.shengjava"/>
 * 解释:@ComponentScan 用于扫描
 * 注解 @Import(SubAppConfig.class) 功能相当于:<import resource="beans.xml"/>,不过这里引入的是.class
 */
@Configuration
@ComponentScan(basePackages = "com.shengjava")
@Import(SubAppConfig.class)
public class AppConfig {

    /**
     * 注解 @Bean 相当于:<bean id="user" class="com.shengjava.pojo.User"></bean>
     * 返回值:相当于bean标签中的class属性。
     * 方法名:相当于bean标签中的id属性。
     */
    @Bean
    public User user() {
        return new User();
    }

}

SubAppConfig类。注解: ==@Configuration==

/**
 * @Configuration 就相当于我们之前定义的beans.xml。
 */
@Configuration
public class SubAppConfig {

}

AppConfigTest类。

注意:这里获取的不是之前用xml配置时的ClassPathXmlApplicationContext了,而是AnnotationConfigApplicationContext。

public class AppConfigTest {
    public static void main(String[] args) {
        // 获取注解配置容器(注意:这里获取的对象不是ClassPathXmlApplicationContext了!而是注解配置容器)
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        // 获取对象
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

输出

com.shengjava.pojo.User@3270d194

二、注解总结

1.@Configuration

@Configuration 就类似于我们之前定义的beans.xml。

注解 @Configuration 相当于:。

2.@ComponentScan

@ComponentScan 用于扫描。

例如,注解 @ComponentScan(basePackages = "com.acme") 相当于如下xml配置:

<context:component-scan base-package="com.shengjava"/>

3.@Import

这个注解用于引入其他的注解配置类。

例如,注解 @Import(SubAppConfig.class) 功能相当于如下xml配置:

<import resource="beans.xml"/>

4.@Bean

注解 @Bean 用于方法上,返回值:相当于bean标签中的class属性。方法名:相当于bean标签中的id属性。

例如,下面java:

    /**
     * 注解 @Bean 相当于:<bean id="user" class="com.shengjava.pojo.User"></bean>
     * 返回值:相当于bean标签中的class属性。
     * 方法名:相当于bean标签中的id属性。
     */
    @Bean
    public User user() {
        return new User();
    }

相当于xml配置:

<bean id="user" class="com.shengjava.pojo.User"></bean>

参考自:1.12. Java-based Container Configuration

三、扩展

@Resource、@PostConstruct 、@PreDestroy 这三个注解是JDK 6到8的标准Java库的一部分。但是,整个javax.annotation 包都与JDK 9中的核心Java模块分开,并最终在JDK 11中删除了。如果需要,需要对javax.annotation-api工件进行处理。现在可以通过Maven Central获得,只需像其他任何库一样将其添加到应用程序的类路径中即可。

上面这段话是说,如果你现在用的是JDK9及以上的JDK,你想使用@Resource注解,那你就要在maven引入如下依赖:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

参考自:1.9.9. Using @PostConstruct and @PreDestroy

  • 本文作者: 长生的梦呓
  • 本文链接: https://shengjava.com/archives/spring5ioc-基于java的容器配置
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 内网穿透 # 项目实战 # 数据库 # MySQL # 安卓踩坑 # 开发工具 # 设计模式 # Enum # 枚举 # Linux # MyBatis-plus # JSON # IDEA # Transactions # AOP # IO 流 # DP # IoC 与 DI # 位运算技巧 # 工具类 # 学习技巧 # Git # JDK # 排序 # Spring Boot # Spring MVC # Spring Framework # MyBatis # Log4J # Regex # Jsoup # JDBC # 数据结构 # 递推 # 递归 # 算法 # Servlet与JSP # 小难 # 中等 # 简单
【Spring】(4)IoC - 基于注解的容器配置
【蓝桥杯】第九届决赛 - 海盗与金币
  • 文章目录
  • 站点概览
长生的梦呓

长生的梦呓

110 日志
39 分类
40 标签
RSS
E-mail CSDN
Creative Commons
Links
  • CSDN 地址
  • waltz26
  • Ryan Wang's Blog
  • JohnNiang's Blog
  • 廖雪峰
  • 菜鸟教程
© 2021 长生的梦呓
浙ICP备20005262号-1