IDEA项目实践——Spring框架简介,以及IOC注解

这篇具有很好参考价值的文章主要介绍了IDEA项目实践——Spring框架简介,以及IOC注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍

IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

IDEWA项目实践——mybatis的一些基本原理以及案例

IDEA项目实践——动态SQL、关系映射、注解开发

文章目录

第1章 Spring 概述

1.1 Spring 框架是什么

1.2 Spring 优点

1.3 Spring 体系结构

第2章 IoC 控制反转

2.1 开发工具准备

2.2 Spring 的第一个程序

2.2.1 创建 maven 项目

2.2.2 引入 maven 依赖 pom.xml

2.2.3 定义接口与实体类

2.2.4 创建 Spring 配置文件

2.2.5 定义测试类

2.2.6 使用 spring 创建非自定义类对象

2.2.7 容器接口和实现类

2.3 基于 XML 的 DI

2.3.1 注入分类

(1) set 注入(掌握)

A、 简单类型

B、引用类型

(2) 构造注入(理解)

2.3.2 引用类型属性自动注入

(1) byName 方式自动注入

(2) byType 方式自动注入

2.3.3 为应用指定多个 Spring 配置文件

2.4 基于注解的 DI

2.4.1 定义 Bean 的注解@Component(掌握)

2.4.2 简单类型属性注入@Value(掌握)

2.4.3 byType 自动注入@Autowired(掌握)

2.4.4 byName 自动注入@Autowired 与@Qualifier(掌握)

2.4.5 JDK 注解@Resource 自动注入(掌握)

2.4.6 注解与 XML 的对比

第3章 传统案例实现与spring对比

3.1  项目目录

3.2 person类

3.3 在pom.xml文件导入下面的依赖

3.4 写一个配置文件 

3.5  利用spring优化的地方

总结


前言

本文主要是对spring框架的简单介绍以及LOC控制反转介绍,以及基于xml的DI和注解开发案例讲解,文章当中的案例经供参考。具体的开发应用要按照具体的开发来书写。

第1章 Spring 概述

1.1 Spring 框架是什么

Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。

Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。 即在 Spring 中说明对象(模块)的关系。

程序开发的原则:高内聚、低耦合【类与类之间的关系不能太精密】

Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使 得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务 “混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

官网:Spring | Home

Spring是面向切面的编程

1.2 Spring 优点

Spring 是一个框架,是一个半成品的软件。有 20 个模块组成。它是一个 容器管理对象,容器是装东西的,Spring 容器不装文本,数字。装的是对象。 Spring 是存储对象的容器

(1) 轻量

Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核心功能的所需的 jar 总共在 3M 左右。

Spring 框架运行占用的资源少,运行效率高。不依赖其他 jar

(2) 针对接口编程,解耦合

Spring 提供了 Ioc 控制反转,由容器管理对象,对象的依赖关系。原来在程序代码中的对象创建方式,现在由容器完成。对象之间的依赖,解耦合。

IOC是( Inversion of Control )的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。

程序的流程控制权相对于传统的面向过程编程而言发生了反转

下面是维基百科的描述

In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to traditional control flow.

看到这里大家可能会觉得云里雾里的…控制反转(Inversion of Control)实际是控制(Control)和反转(Inversion)两个词的组合,所以拨开云雾的关键在于理解控制和反转。

“反转”

  • 程序的流程控制权发生了转变
  • 应用程序与第三方代码之间的调用关系发生了转变

复用代码有三种方式:类库、框架、设计模式。

  • 类库:强调代码复用;
  • 定义一组可复用的代码,供其他程序调用——拿来主义,别人的东西拿来用,用别人的锤子砸核桃。
  • 框架:强调设计复用;
  • 定义程序的体系结构,开发人员通过预留的接口插入代码(做填空题)——把自己的锤子装在流水线上,让它砸核桃。
  • 设计模式:复用解决方案;
  • 设计模式提供了解决一类问题的有效经验,复用这些经验往往可以很好地解决问题——看别人是怎么砸核桃的,依葫芦画瓢模仿一遍。

DI:依赖注入【IOC的底层】

 (3) AOP 编程的支持

通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用 传统 OOP 实现的功能可以通过 AOP 轻松应付【面向切面编程】

在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明 式方式灵活地进行事务的管理,提高开发效率和质量。

(4) 方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使 用难度,Spring 提供了对各种优秀框架(如 Struts,Hibernate、MyBatis)等 的直接支持。简化框架的使用。

Spring 像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪 个框架,就把这个插头放入插线板。不需要可以轻易的移除。

1.3 Spring 体系结构

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、提供 JVM 的代理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。

第2章 IoC 控制反转

控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的 装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现 方式是依赖注入。应用广泛。

依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完 成功能,即 classA 对 classB 有依赖。

Ioc 的实现:

依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些 工作由容器自行完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在 代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象 之间依赖关系的管理。

Spring 框架使用依赖注入(DI)实现 IoC。

Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系, Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IoC 实现 对象之间的解耦和。

2.1 开发工具准备

开发工具:idea2017 以上

依赖管理:maven3 以上

jdk:1.8 以上

需要设置 maven 本机仓库:

2.2 Spring 的第一个程序

举例:spring-quickstart

2.2.1 创建 maven 项目

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.2.2 引入 maven 依赖 pom.xml
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.9</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
2.2.3 定义接口与实体类
//接口创建
 public interface SomeService {
     void doSome();
 }

先写一个接口, 接口里面有方法

下面的是实现类

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

再写一个子包

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

让SomeServiceImpl实现类实现SomeService接口

重写方法

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 完整代码段:

package com.ambow.services.impl;

import com.ambow.services.SomeService;
//让SomeServiceImpl实现类实现SomeService接口
public class SomeServiceImpl implements SomeService {
    public SomeServiceImpl(){
        System.out.println("========调用了SomeServiceImpl的无参构造方法========");
    }

    @Override
    public void doSome() {
        System.out.println("=======doSome业务方法==========");
    }
}
2.2.4 创建 Spring 配置文件

在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为 applicationContext.xml。

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 选择上述的创建方式会将头文件自己编辑好,不用我们自己加入,方便快捷。

创建好之后在容器里面创建对象

spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。

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

    <!-- 创建bean的对象 Spring容器用来管理bean对象-->
    <bean id="someService" class="com.ambow.services.impl.SomeServiceImpl"/>
</beans>

<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。

id【对象名】:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。

class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

2.2.5 定义测试类

在test里面创建一个对象原来测试 

 IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

使用的是ClassPathXml下的xml文件

将前面的xml文件导入

使用里面的getbean方法拿到容器

package com.ambow.test;

import com.ambow.services.SomeService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    @Test
    public void test01(){
        //1.获取到Spring的容器
        //使用技巧:连续按住shift两次就可以看到类,ctrl+h可以查看ApplicationContext接口
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.从容器当中取出对象
        //此处的返回对象类型是已知的SomeService,使用的时候可以换回来,原先的是object类型
        SomeService someService = (SomeService) ctx.getBean("someService");
        //3.使用对象,调用里面的方法
        someService.doSome();
    }
}

运行结果: 

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

现在是容器帮助我们去创建【new】对象

2.2.6 使用 spring 创建非自定义类对象

spring 配置文件加入 java.util.Date 定义:

    <!--注册非定义类的对象-->
    <bean id="myDate" class="java.util.Date" />

MyTest 测试类中:

调用 getBean(“myDate”); 获取日期类对象。

在前面的测试里面加入以下代码

    @Test
    public void test02(){
        //1.获取到Spring的容器
        //使用技巧:连续按住shift两次就可以看到类,ctrl+h可以查看ApplicationContext接口
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.从容器当中取出对象
        //此处的返回对象类型是已知的SomeService,使用的时候可以换回来,原先的是object类型
        Date myDate = (Date) ctx.getBean("myDate");
        //3.使用对象,调用里面的方法
        System.out.println(myDate);
    }

运行结果:

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 此处虽然我们没有调用无参构造方法,但是此处还是调用了该方法。

2.2.7 容器接口和实现类

ApplicationContext 接口(容器)

ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容 器”的角色。其实现类有两个。

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

带有小耳机的哪些是抽象类,真正用到的是filesystemxml【文件的,但是不适合开发,开发时每个人的电脑存放的文件地址都不一样,不好维护】和classpathxml【类的,通过这个来创建容器】

A、 配置文件在类路径下

若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

B、ApplicationContext 容器中对象的装配时机

ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一 次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即 可。执行效率较高。但占用内存。

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 案例测试:IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

C、使用 spring 容器创建的 java 对象

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.3 基于 XML 的 DI

举例:项目 di-xml

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.3.1 注入分类

bean 实例在调用无参构造器创建对象后,就要对 bean 对象的属性进行初 始化。初始化是由容器自动完成的,称为注入。

根据注入方式的不同,常用的有两类:set 注入、构造注入。

(1) set 注入(掌握)

set 注入也叫设值注入是指,通过 setter 方法传入被调用者的实例。这种 注入方式简单、直观,因而在 Spring 的依赖注入中大量使用。

A、 简单类型

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

package com.ambow.pojo;

public class Student {
    private String name;
    private int age;
    
    //alt+insert出现快捷键创建tostring和其他方法

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

创建 java.util.Date 并设置初始的日期时间:

<!--注册非定义类的对象-->
    <bean id="myDate" class="java.util.Date">
        <property name="time" value="12143432412532"/>
    </bean>

Spring 配置文件:

 测试方法:

@Test
    public void test02(){
        Date date = (Date) ctx.getBean("myDate");
        System.out.println(date);
    }
B、引用类型

当指定 bean 的某属性值为另一 bean 的实例时,通过 ref 指定它们间的引 用关系。ref 的值必须为某 bean 的 id 值。

    <bean id="student" class="com.ambow.pojo.Student">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
        <!-- 此处的学校为引用类型,使用需要使用ref -->
        <property name="school" ref="school"/>

    </bean>
    <bean id="school" class="com.ambow.pojo.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京"/>
    </bean>

对于其它 Bean 对象的引用,使用标签的 ref 属性

测试方法:

@Test
    public void test01(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student = (Student) ctx.getBean("student");
        System.out.println(student);
    }
(2) 构造注入(理解)

构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即, 使用构造器设置依赖关系。

举例 1:

    <!-- 构造注入 -->
    <bean id="student1" class="com.ambow.pojo.Student">
        <constructor-arg name="name" value="李四"/>
        <constructor-arg name="age" value="19"/>
        <constructor-arg name="school" value="student"/>
    </bean>

<constructor-arg />标签中用于指定参数的属性有:

  • name:指定参数名称。

  • index:指明该参数对应着构造器的第几个参数,从 0 开始。不过,该属性 不要也行,但要注意,若参数类型相同,或之间有包含关系,则需要保证赋值顺 序要与构造器中的参数顺序一致。

举例 2:

@Test
    public void test03(){
        Student student = (Student) ctx.getBean("student1");
        System.out.println(student);
    }

最终的student类:

package com.ambow.pojo;

public class Student {
    private String name;
    private int age;
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法

    //加入无参构造


    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

school类:

package com.ambow.pojo;

public class School {
    private String name;
    private String address;

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

使用构造注入创建一个系统类 File 对象

2.3.2 引用类型属性自动注入

对于引用类型属性的注入,也可不在配置文件中显示的注入。可以通过为 标签设置 autowire 属性值,为引用类型属性进行隐式自动注入(默 认是不自动注入引用类型属性)。根据自动注入判断标准的不同,可以分为两 种:

  • byName:根据名称自动注入

  • byType: 根据类型自动注入

(1) byName 方式自动注入

当配置文件中被调用者 bean 的 id 值与代码中调用者 bean 类的属性名相 同时,可使用 byName 方式,让容器自动将被调用者 bean 注入给调用者 bean。容器是通过调用者的 bean 类的属性名与配置文件的被调用者 bean 的 id 进行比较而实现自动注入的。

举例:

这种是根据名字自动注入

    <bean id="student" class="com.ambow.pojo.Student" autowire="byName">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
        <!-- 此处的学校为引用类型,使用需要使用ref -->
<!--        <property name="school" ref="school"/>-->

    </bean>

接着测试:

@Test
    public void test01(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student = (Student) ctx.getBean("student");
        System.out.println(student);
    }
(2) byType 方式自动注入

使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属 性指定的类,要与代码中调用者 bean 类的某引用类型属性类型同源。即要么 相同,要么有 is-a 关系(子类,或是实现类)。但这样的同源的被调用 bean 只能有一个。多于一个,容器就不知该匹配哪一个了。

举例:

    <bean id="student2" class="com.ambow.pojo.Student" autowire="byType">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
        <!-- 此处的学校为引用类型,使用需要使用ref -->
        <!--        <property name="school" ref="school"/>-->

    </bean>

    <!--注册非定义类的对象-->
    <bean id="myDate" class="java.util.Date">
        <property name="time" value="12143432412532"/>
    </bean>

    <bean id="school1" class="com.ambow.pojo.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京"/>
    </bean>

    <!-- 构造注入 -->
    <bean id="student1" class="com.ambow.pojo.Student">
        <constructor-arg name="name" value="李四"/>
        <constructor-arg name="age" value="19"/>
        <constructor-arg name="school" value="school1"/>
    </bean>

测试类:

@Test
    public void test04(){
        Student student = (Student) ctx.getBean("student2");
        System.out.println(student);
    }
2.3.3 为应用指定多个 Spring 配置文件

在实际应用里,随着应用规模的增加,系统中 Bean 数量也大量增加,导 致配置文件变得非常庞大、臃肿。为了避免这种情况的产生,提高配置文件的 可读性与可维护性,可以将 Spring 配置文件分解成多个配置文件。

包含关系的配置文件:

多个配置文件中有一个总文件,总配置文件将各其它子文件通过<import />引入。在 Java 代码中只需要使用总配置文件对容器进行初始化即可。

举例:

bean-school.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--注册非定义类的对象-->
    <bean id="myDate" class="java.util.Date">
        <property name="time" value="12143432412532"/>
    </bean>

    <bean id="school1" class="com.ambow.pojo.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京"/>
    </bean>
</beans>

bean-student.xml文件:

autowire自动注入

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

    <bean id="student" class="com.ambow.pojo.Student" autowire="byName">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
        <!-- 此处的学校为引用类型,使用需要使用ref -->
        <!--        <property name="school" ref="school"/>-->

    </bean>

    <!-- 构造注入 -->
    <bean id="student1" class="com.ambow.pojo.Student">
        <constructor-arg name="name" value="李四"/>
        <constructor-arg name="age" value="19"/>
        <constructor-arg name="school" value="school1"/>
    </bean>

    <bean id="student2" class="com.ambow.pojo.Student" autowire="byType">
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
        <!-- 此处的学校为引用类型,使用需要使用ref -->
        <!--        <property name="school" ref="school"/>-->

    </bean>
</beans>

主配置文件:

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

    <import resource="bean-student.xml"/>
    <import resource="bean-school.xml"/>

</beans>

 IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

整体的目录结构如上图所示。 

Spring 配置文件:

也可使用通配符 * 。但,此时要求父配置文件名不能满足*所能匹配的格 式,否则将出现循环递归包含。就本例而言,父配置文件不能匹配 spring- *.xml 的格式,即不能起名为 spring-total.xml。

测试代码:

2.4 基于注解的 DI

举例:di-annotation 项目

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 1)导入依赖

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.26</version>
        </dependency>

2)将前面的student与school类导入进来

对于 DI 使用注解,将不再需要在 Spring 配置文件中声明 bean 实例

Spring 中使用注解,需要在原有 Spring 运行环境基础上再做一些改变。

需要在 Spring 配置文件中配置组件扫描器,用于在指定的基本包中扫描 注解。

PS:注解相当于在原先的类上面做一个标记,加标记之后,spring在容器里面生成类的对象

 3)在resources文件夹里面创建applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启注解开发 base-package扫描的包,可以扫描多个包-->
    <!-- 一般使用逗号或者空格或者;来隔开好几个包,或者直接指明父包【这种情况下扫描的包较多就会浪费资源】 -->
    <context:component-scan base-package="com.ambow.pojo,com.ambow.mapper,com.ambow.service"/>

</beans>

指定多个包的三种方式:

1)使用多个 context:component-scan 指定不同的包路径

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2)指定 base-package 的值使用分隔符

分隔符可以使用逗号(,)分号(;)还可以使用空格,不建议使用空格。

逗号分隔或者分号分隔

<?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 https://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启组件扫描 base-package扫描的包,可以扫描多个包-->
    <!-- 一般使用逗号或者空格或者;来隔开好几个包,或者直接指明父包【这种情况下扫描的包较多就会浪费资源】 -->
    <context:component-scan base-package="com.ambow.pojo,com.ambow.mapper,com.ambow.service"/>
    
</beans>

3)base-package 是指定到父包名

base-package 的值表是基本包,容器启动会扫描包及其子包中的注解,当 然也会扫描到子包下级的子包。所以 base-package 可以指定一个父包就可以。

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

或者最顶级的父包

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

但不建议使用顶级的父包,扫描的路径比较多,导致容器启动时间变慢。指定 到目标包和合适的。也就是注解所在包全路径。例如注解的类在 com.bjpowernode.beans 包中

<context:component-scan base-package="com.ambow.pojo"/>
2.4.1 定义 Bean 的注解@Component(掌握)
     需要在类上使用注解@Component,该注解的 value 属性用于指定该 bean 的 id 值。 

举例:student类

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
//添加注解
@Component("myStudent")
public class Student {
    private String name;
    private int age;
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法
    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

另外,Spring 还提供了 3 个创建对象的注解:【应用于web开发里面】

  • @Repository 用于对 DAO持久层】 实现类进行注解

  • @Service 用于对 Service 业务层】实现类进行注解

  • @Controller 用于对 Controller【控制层】 实现类进行注解

这三个注解与@Component 都可以创建对象,但这三个注解还有其他的含义

  • @Service 创建业务层对象,业务层对象可以加入事务功能,
  • @Controller 注解创建的对象可以作为处理器接收用户的请求。
  • @Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象。即持久层对象,业务层对象,控制层对象
  • @Component 不指定 value 属性,bean 的 id 是类名的首字母小写。

测试类测试

package com.ambow.test;

import com.ambow.pojo.School;
import com.ambow.pojo.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationTest {
    @Test
    public void test01(){
        ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student myStudent = (Student) cxt.getBean("myStudent");
        System.out.println(myStudent);
    }
}

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI  此处并未赋值。

注解

@Component("myStudent")

等价于

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.4.2 简单类型属性注入@Value(掌握)

需要在属性上使用注解@Value,该注解的 value 属性用于指定要注入的 值。

使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter, 则也可将其加到 setter 上。

举例:

student类:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
//注解为硬编码,编辑需要修改原来的代码【使用在不经常修改的地方可以使用注解】
//xml不需要重新修改代码,不需要重新打包,但是大型的程序并不好开发。
//添加注解注入
//Service在业务层
//@Service("myStudent")
@Component("myStudent")
public class Student {
    @Value("李四")
    private String name;
    @Value("18")
    private int age;
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法


    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

school类:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//不给值默认会将类名称小写
@Component("mySchool")
public class School {
    @Value("北京大学")
    private String name;
    @Value("北京")
    private String address;

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

测试类:

在原先的测试用例基础之上书写测试用例test02

@Test
    public void test02(){
        ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
        School school = (School) cxt.getBean("mySchool");
        System.out.println(school);
    }

 IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.4.3 byType 自动注入@Autowired(掌握)

此时的学生类里面的school属性任然为空值

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装 配 Bean 的方式。

使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter, 则也可将其加到 setter 上。

举例:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
//注解为硬编码,编辑需要修改原来的代码【使用在不经常修改的地方可以使用注解】
//xml不需要重新修改代码,不需要重新打包,但是大型的程序并不好开发。
@Component("myStudent")
public class Student {
    @Value("李四")
    private String name;
    @Value("18")
    private int age;
    //为学校注入注解【指定类型注入】,Autowired默认以类型注入
    @Autowired
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法


    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

注入完成之后继续测试

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

可以看到此时的学校注入进去了。 

2.4.4 byName 自动注入@Autowired 与@Qualifier(掌握)

因为前面编辑school类的时候已经将school的component属性名编辑了,既是下面的内容:

@Component("mySchool")

需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。

此时的名称不可被修改,如果修改名称则会报错,Qualifier会找不到相关的名称

举例:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
//注解为硬编码,编辑需要修改原来的代码【使用在不经常修改的地方可以使用注解】
//xml不需要重新修改代码,不需要重新打包,但是大型的程序并不好开发。
//添加注解注入
//Service在业务层
//@Service("myStudent")
@Component("myStudent")
public class Student {
    @Value("李四")
    private String name;
    @Value("18")
    private int age;
    //另外一种注解【指定名称注入】,以名字注入,必须两个一起搭配使用,否则将会报错,无法注入。
    @Autowired
    //此时如果学校类的名字修改之后将会报错,
    @Qualifier("mySchool")
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法


    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败 后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配 的属性值为 null。

2.4.5 JDK 注解@Resource 自动注入(掌握)

Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以 按名称匹配 Bean,也可以按类型匹配 Bean。默认是按名称注入。使用该注 解,要求 JDK 必须是 6 及以上版本。@Resource 可在属性上,也可在 set 方 法上。

(1) byType 注入引用类型属性

@Resource 注解若不带任何参数,采用默认按名称的方式注入,按名称不 能注入 bean,则会按照类型进行 Bean 的匹配注入。

举例:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
@Component("myStudent")
public class Student {
    @Value("李四")
    private String name;
    @Value("18")
    private int age;
    //Resource按照名字注入,先按照名称注入,找不到在按照类型注入
    @Resource
    private School school;

    //alt+insert出现快捷键创建tostring和其他方法

    public Student() {
    }

    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

运行测试: 

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

(2) byName 注入引用类型属性

@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹 配的 Bean 的 id。

举例:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
@Component("myStudent")
public class Student {
    @Value("李四")
    private String name;
    @Value("18")
    private int age;
    //添加属性值就会按照属性来注入,修改名称会报错。
    //测试一下另外一个类【假设为Score,名称和学校的相同时】,其另外一类的属性和学校类相同,名称相同时,引用时会报错,不会注入另外一个类【假设为Score】
    @Resource(name = "mySchool")
    private School school;
    //alt+insert出现快捷键创建tostring和其他方法
    public Student() {
    }
    public Student(String name, int age, School school) {
        this.name = name;
        this.age = age;
        this.school = school;
    }

    //加入set方法获取name和age
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

Score类:

package com.ambow.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//默认的会是下面这种形式的命名
@Component("myScore")
//此处要是测试的话需要是下面的这种形式
//@Component("mySchool")
public class Score {
    @Value("大润发商店")
    private String name;
    @Value("长清区")
    private String address;
}

运行测试会报错

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

2.4.6 注解与 XML 的对比

注解优点是:

  • 方便

  • 直观

  • 高效(代码少,没有配置文件的书写那么复杂)。

其弊端也显而易见:以硬编码的方式写入到 Java 代码中,修改是需要重新 编译代码的。

XML 方式优点是:

  • 配置和代码是分离的

  • 在 xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。

XML 的缺点是:编写麻烦,效率低,大型项目过于复杂。

第3章 传统案例实现与spring对比

3.1  项目目录

 IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

3.2 person类

传统的是创建对象

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 后面一段代码IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 传统的方式如果要修改程序就需要重新写IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI这种硬编码,修改繁琐。是一种强耦合方式,升级不方便。

3.3 在pom.xml文件导入下面的依赖

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

3.4 写一个配置文件 

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 写入以下信息IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 如果要修改的话,此时的可以直接修改bean里面的对象,可以修改为car

3.5  利用spring优化的地方

前面自己创建的交通工具类,选择直接让容器创建即可,我们不再需要自己创建。 

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 包括前面的person类,也可以不用创建,直接在配置文件里面创建person即可

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 此处给的person的值为李四,ref引用上面的v1里面的交通工具。

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 修改的部分IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 原先的在容器里面创建

IDEA项目实践——Spring框架简介,以及IOC注解,IDEA软件的使用与相关项目的操作,intellij-idea,java,IDEA,spring,LOC,注解开发,xml的DI

 程序的耦合度就降低了

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!文章来源地址https://www.toymoban.com/news/detail-632671.html

到了这里,关于IDEA项目实践——Spring框架简介,以及IOC注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全面掌握Spring框架:深入解析IOC、AOP、事务管理与注解使用

    探索Spring框架的深层次知识,包括Spring IOC容器的初始化流程、AOP的实现机制、事务管理的细节、循环依赖问题的处理、条件注解的应用、JavaConfig的使用方法、PostProcessor的角色、@Autowired和@Value注解的高级应用,以及${}与#{}的区别。

    2024年03月13日
    浏览(181)
  • 【Spring教程十】Spring框架实战:全面深入详解IOC/DI之--纯注解开发模式下的依赖注入&&注解读取properties配置文件

    欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《 全面深入详解IOC/DI注解开发》 Spring为了使用注解简化开发,并没有提供

    2024年02月04日
    浏览(43)
  • 【Spring教程11】Spring框架实战:IOC/DI注解开发管理第三方bean的全面深入详解

    欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《 纯注解开发模式下的依赖注入和读取properties配置文件》 前面定义bean的时

    2024年02月04日
    浏览(42)
  • spring框架,以及和spring框架相关的Java面试题和spring ioc的注入方式

    目录 一.spring来源,以及介绍 1.spring诞生的背景 2.spring框架 介绍 3.spring框架在使用中的优点以及不足 3.1优点  3.2不足 3.3总结 4.为什么要使用spring  二.将spring框架部署在IDEA中  1.替换pom.xml  2.构建spring所需要的xml文件 三.spring的三种注入方式 0.定义需要的类,方法 1.方法注入

    2024年02月12日
    浏览(35)
  • 129.【Spring 注解_IOC】

    (1).无注解注入方式 在pom文件中加入spring-context依赖: xml文件和注解的包 定义一个实体类 在resource目录下的beans.xml配置文件中通过 bean /bean标签注入类实例 获取容器中通过配置文件注入的实例对象 (2).注解注入方式 1.MyConfig.java 2.Main.java (1).无注解扫描方式 只要我们加上 @Config

    2024年02月12日
    浏览(25)
  • 【Spring6】| Spring IoC注解式开发

    目录 一:Spring IoC注解式开发 1. 回顾注解 2. 声明Bean的四个注解 3. Spring注解的使用 4. 选择性实例化Bean 5. 负责注入的注解(重点) 5.1 @Value 5.2 @Autowired与@Qualifier 5.3 @Resource 6. 全注解式开发 注解的存在主要是为了简化XML的配置 ,Spring6倡导全注解开发。 我们来回顾一下:

    2023年04月12日
    浏览(35)
  • Spring IOC相关注解运用——下篇

    目录 一、@Configuration 二、@ComponentScan 1. 说明 2. 测试方法 3. 运行结果 三、@PropertySource 1. 说明 2. 测试方法 3. 测试结果 四、@Bean 1. 说明 2. 添加驱动依赖 3. 将Connection对象放入Spring容器 3. 测试 五、@Import 1. 说明 2. 测试方法 3. 运行结果 往期专栏文章相关导读  1. Maven系列专栏文

    2024年02月05日
    浏览(30)
  • Spring IOC相关注解运用——上篇

    目录 前言 一、@Component 二、@Repository、@Service、@Controller 三、@Scope 四、@Autowired 五、@Qualifier 六、@Value 1. 直接设置固定的属性值 2. 获取配置文件中的属性值 3. 测试结果 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列专栏文章 3. Spring系列专栏文章         注解配

    2024年02月02日
    浏览(31)
  • Spring IOC @Configuration注解分析

    在使用SpringBoot开发时,最常用的注解有@Component、@Service、@Controller、@Configuration等。当类使用这些注解标记时,类会被Spring IOC容器管理,包括创建,填充属性和实例化。 但是Spring容器如何发现并将这些类放到容器进行管理呢? 今天这篇博客主要分析Spring如何处理@Configuratio

    2024年02月08日
    浏览(28)
  • spring 详解五 IOC(注解开发)

    注解开发已经成为开发的主流选择,例如springboot都是基于注解开发使用的spring,所以学习注解开发是很有必要的,基本Bean注解, 主要是使用注解的方式替代原有xml的bean 标签及其标签属性的配置 XML 配置 注解 描述 bean id=“” class=“” @Component 被该注解标识的类,会在指定扫

    2024年02月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包