IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringIOC自动注入:@Autowired注解注入 -> 正文阅读

[Java知识库]SpringIOC自动注入:@Autowired注解注入

1、本篇博客的背景和目的

目前我本人正在学习SpringFramework的知识,这也是这个专栏的主题。我前面的几篇博文中,简单的认识了一下SpringFramework,记录了SpringFramework的环境搭建,记录了SpringIOC如何加载配置文件,记录了SpringIOC三种Bean对象的实例化方法。还记录了SpringIOC手动装配(注入)的方法之一:set方法注入。还有另外三个不太常用的SpringIOC手动注入的方法。其实目前大部分都使用的是自动注入的方法,手动注入使用的不多。就算是使用手动注入的方法,使用的主流也是:set方法注入。自动注入的方法主要是使用两个注解,@Autowired注解或者是@Resource注解。上一篇博文记录了使用@Resource注解。本篇博客我记录一下使用@Autowired注解。

2、我的上一篇博客

上一篇博客记录了使用@Resource注解实现自动注入的实现方法。链接如下:

SpringIOC自动注入:@Resource注解注入_你是我的日月星河的博客-CSDN博客icon-default.png?t=M4ADhttps://blog.csdn.net/weixin_46281472/article/details/125116299?spm=1001.2014.3001.5501

3、@Autowired注解使用的方法

其实@Autowired注解和@Resource注解的使用方法是一样的。都是使用在私有属性的上方,都需要在XML文件中写上<context:annotation-config/>标签来开启使用注解自动装配的功能。下面我粘贴一张图片大概表示一下@Autowired注解的使用注意:

1、@Autowired注解就是直接看bean标签的class属性的值,这个值跟类字段所属类对应就可以,与属性字段名无关。(这里是和@Resource注解的区别所在,@Resource注解是默认以bean标签的id属性值为准的,如果不一样,那么才会对应class属性值和字段所属类)。

2、使用这个注解的属性可以没有set方法,也可以有set方法。这里我还是强烈建议:所有的实体类的所有属性都加上get()和set()方法。(这个是和@Resource要求一样的)

3、这个注解可以写在类属性的上方,也可以写在set方法的上方(这个和@Resource要求一样)

4、如果类中的属性是接口,这个接口只有一个实现类的话还好说,就直接使用@Autowired注解就可以了,默认注入的就是接口唯一的实现类;但是如果这个接口有多个实现类,那么就需要配合使用另外一个注解:@Qualifier注解,这个注解里面有一个 value属性,将value属性的值设置为对应bean标签的id属性值;这样就可以对得上了;(也就是说:@Resource注解的name属性相当于和@Autowired配套使用的@Qualifier注解的value属性)。

4、我的代码

我的实例代码中并没有使用到一个接口多个实现类的情况,所以我的实例代码中并没有使用到@Qualifier(value="对应XML文件中bean标签的id属性值")这样的代码。在我的上一篇博客里面,也没有使用@Resource(name="对应XML文件中bean标签的id属性值")

其实下面的实例代码就是将我上一篇博客中的@Resource注解换成@Autowired注解就可以了。代码如下(我就不多解释了):

我的POM文件代码:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dcy</groupId>
  <artifactId>spring04</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>spring04</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <dependencies>

<!--    这个是Spring框架的核心依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

简单类UserDao实体类代码:

package com.dcy.dao;

public class UserDao {

    public void test(){
        System.out.println("这个是内部的UserDao变量");
    }
}

使用自动注入注解的UserService类代码:

package com.dcy.service;

import com.dcy.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;

public class UserService {

    @Autowired
    private UserDao userDao;
    public void test(){
        System.out.println("这个是UserService类内部的test方法");
        userDao.test();
    }
}

注意上面的代码:将@Autowired使用在了属性的上方,并且这个注解是来自于Spring的。

XML配置文件代码:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <!--   开启自动化装备(注入),也就是注解注入 @Autowired或者@Resource-->
<!--    好处就是我们不需要在手动写  property标签,不需要使用set方法或者是构造器方法
        去手动写类里面的参数关系
-->
    <context:annotation-config/>
    <bean id="userService" class="com.dcy.service.UserService"></bean>
    <bean id="userDao" class="com.dcy.dao.UserDao"></bean>

</beans>

Main方法的测试代码:

package com.dcy;

import com.dcy.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Starter {
    public static void main(String[] args) {
        //首先加载配置文件
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
        //获得UserService对象
        UserService userService = (UserService) ac.getBean("userService");
        //调用方法
        userService.test();
    }
}

运行结果如下:

5、我的下一篇博文链接?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:21:09  更:2022-06-14 22:26:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:42:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码