icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaSE

  • JavaWeb

  • JavaEE

    • MyBaties

    • Spring

      • 初识Spring
      • IoC与DI
      • Spring Bean
      • 常用IoC注解
        • 一、常用IoC注解
          • 1. 用于创建对象的
          • 2. 用于注入数据的
          • 3. 用于改变作用范围的
          • 4. 与生命周期相关
        • 二、配置相关的新注解
      • 基于xml与注解的CRUD
      • 整合Junit
      • Spring核心思想
      • 动态代理
    • SpringBoot

  • JavaTopic

  • 设计模式

  • 计算机基础

  • Java后端
  • JavaEE
  • Spring
iqqcode
2021-06-17
目录

常用IoC注解

# 一、常用IoC注解

在使用注解配置Spring时,applicationContext.xml配置如下:

告知Spring在创建容器时要扫描的包,配置所需要的标签不在beans中,而是在context名称空间约束中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--告知Spring在创建容器时要扫描的包,配置所需要的标签不在beans中,而是在context名称空间约束中-->

    <context:component-scan base-package="org.iqqcode"/>

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 1. 用于创建对象的

他们的作用就和在XML配置文件中编写一个标签实现的功能是一样的

1. @Component

【出现位置】:类上注解

【作用】:创建当前类对象,并且存入Spring容器中

【属性】:

  • value:用于指定bean的id。当我们不写时(属性只有一个),它的默认值是当前类名,且首字母改小写。如果有多个属性值时,必须全部指定出

2. @Controller

  • 一般用在表现层

3. @Service

  • 一般用在业务层

4. Repository

  • 一般用在持久层

以上三个注解他们的作用和属性与Component是一模一样,是对Component的继承。

他们三个是Spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

# 2. 用于注入数据的

他们的作用就和在XML配置文件中的bean标签中写一个标签的作用是一样的

# 1. @Autowired

【出现位置】:可以是变量上,也可以是方法上

【作用】

  • 如果IoC容器中有一个类型匹配时,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功

  • 如果IoC容器中没有任何bean的类型和要注入的变量类型匹配,则报错。

  • 如果IoC容器中有多个类型匹配时:先按照数据类型确定匹配的范围,然后按照变量名称作为唯一id,使用@Qualifier在确定的范围中精确匹配

细节:在使用注解注入时,Setter方法就不是必须的了,可以不写

# 2. @Qualifier

【作用】:在按照类中注入的基础之上再按照id名称注入。

它在给类成员注入时不能单独使用,但是在给方法参数注入时可以直接使用。

【使用】:它在给类成员注入时不能单独使用,必须与@Autowired配合使用。@Autowired确定类的匹配范围,@Qualifier根据变量名id精确匹配

【属性】

  • value:用于指定注入bean的id

UserDaoImpl

UserServiceImpl为userDao1类注入数据

【在方法上直接使用】

出现多个连接对象时,我们指定连接某一个:

# 3. @Resource

【作用】:区别于直接按照bean的id注入,它可以独立使用

【 属性】

  • name:用于指定bean的id

以上三 个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。

另外,集合类型的注入只能通过XML来实现。


【@Resource-@Autowired-@Qualifier三个注解小结】

  • @Autowired :按照数据类型从Spring容器中进行匹配(如果有多个相同类型则不能匹配,结合@Qualifier)

  • @Qualifier("userDao") :按照id值从容器中进行匹配,必须结合Autowired一起使用

  • @Resource(name = "userDao"):相当于@Autowired + @Qualifier

示例

@Service("userService")
public class UserServiceImpl implements UserService {
    //<property name="userDao" ref="userDao"/>
    //@Autowired  //按照数据类型从Spring容器中进行匹配(如果有多个相同类型则不能匹配,结合@Qualifier)
    //@Qualifier("userDao")  //按照id值从容器中进行匹配,必须结合Autowired一起使用
    
    @Resource(name = "userDao")  //相当于@Autowired + @Qualifier
    private UserDao userDao;

    public UserServiceImpl() { }

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void login() {
        userDao.login();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 4. @Value

【作用】:用于注入基本类型和String类型的数据

【属性】:

  • value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)

  • SpEL的写法:${表达式}

# 3. 用于改变作用范围的

他们的作用就和在bean标签中使用scope属性实现的功能是一样的

# @Scope

【作用】:用于指定bean的作用范围

【属性】

  • value:指定范围的取值,默认是单例的

    • 常用取值:singleton(单例),prototype(多例)

# 4. 与生命周期相关

他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的

# @PreDestroy

  • 作用:用于指定销毁方法

# @PostConstruct

  • 作用:用于指定初始化方法

# 二、配置相关的新注解

通过注解配置类来取代applicationContext.xml配置文件


@Configuration

【作用】:指定当前类是一个配置类

【细节】:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。


@ComponentScan

【作用】:用于通过注解指定Spring在创建容器时要扫描的包

【属性】

  • value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。

我们使用此注解就等同于在xml中配置了:

<context:component-scan base-package="org.iqqcdode"
1

@Bean

【作用】:用于把当前方法的返回值作为bean对象存入Spring IoC容器中

  • name:用于指定bean的id。当不写时,默认值是当前方法的名称

当我们使用注解配置方法时,如果方法有参数, Spring框架会去容器中查找有没有可用的bean对象,查找的方式和Autowired注解的作用是一样的


@Scope

  • @Scope("prototype"),配置多例对象

@Import

当我们有多个配置类时,要将不同的配置类分开写在不同类中。此时,需要有一个主配置类来管理其他子配置类。@Import注解就相当于把其他配置类(如:JdbcConfig)都导入到主配置类中(SpringConfiguration),只需要加载主配置类,即可加载全部的子配置类。

主配置类:

SpringConfiguration

子配置类:

JdbcConfig

【作用】:用于导入其他的配置类 【属性】

  • value:用于指定其他配置类的字节码

当我们使用Import的注解之后,有Import注解的类就父配置类,而导入的都是配置类.。可以理解为继承关系


@PropertySource

【作用】:用于指定properties文件的位置

【属性】

  • value:指定文件的名称和路径。

  • 关键字:classpath,表示类路径下

@PropertySource("classpath:jdbcConfig.properties")
1

jdbcConfig.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_test?characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=1234
1
2
3
4

该类是一个配置类,它的作用和ApplicationContext.xml是一样的

编辑 (opens new window)
上次更新: 2021/06/28, 14:52:28
Spring Bean
基于xml与注解的CRUD

← Spring Bean 基于xml与注解的CRUD→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×