Spring-IOC

目录

一、Spring是什么?

二、IOC是什么?

三、如何创建一个Spring项目

步骤一:创建一个空的Maven项目

步骤二:添加Spring的依赖

步骤三:使用IOC

方式1:通过xml使用IOC

方式2:通过注解使用IOC

前言

本篇是本人初学Spring时做的一些关于IOC方面的总结,有缺漏和错误之处还请指出


一、Spring是什么?

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO(普通Java对象即"Plain Old Java Object")为基础的编程模型促进良好的编程习惯


二、IOC是什么?

IOC即 Invision Of Control (控制反转)在Spring中我们将设计好的对象交给IOC容器管理,而不是传统的在对象内部直接控制。这样对象的控制权就反转了,程序员无需关心对象的各种创建。只需关注业务的本身,大大降低了程序的耦合性。

P.s. 藕合就是程序间的依赖关系。我们在开发过程中应该做到降低程序间的这种依赖关系也就是解耦,通俗的说就是在程序开发时做到编译不依赖,运行时依赖。


三、如何创建一个Spring项目

步骤一:创建一个空的Maven项目

我用的是IDEA2022,在项目创建上可能与2021前的版本界面不一样

步骤二:添加Spring的依赖

在pom.xml中添加依赖

<!--spring的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>

 P.s. 记得刷新Maven库,可以点击idea的出的刷新图标也可以执行下图步骤

步骤三:使用IOC

方式1:通过xml使用IOC

我们先看一下IDEA给我们创建出来的项目结构

 编写的xml文件全部存放于resources文件夹内

步骤1:创建beans.xml文件(叫啥都行)

创建文件的方式

 P.s. 如果没有进行步骤二将无法显示“Spring Config”选项

beans.xml配置文件

 

至此我们beans.xml文件就创建成功了,下面就是如何注入对象的信息

步骤2:注入对象信息 

创建一个User对象


 步骤3:在beans.xml中配置User的信息,设定User的相关属性

<?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="user" class="demo.User">
        <property name="username" value="张三"></property>
        <property name="age" value="18"></property>
        <!-- 引用日期对象 -->
        <property name="birthDate" ref="date_ref"></property>
    </bean>
​
    <!-- 实例化日期对象 -->
    <bean id="date_ref" class="java.util.Date"></bean>
</beans>

 步骤4:创建一个测试类进行测试

package demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    public static void main(String[] args) {
        //读取Spring的核心配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        //从ioc容器中获取User对象,并注入到myUser中
        User myUser = (User) context.getBean("user");
        System.out.println(myUser.toString());
    }
}

方式2:通过注解使用IOC

注解配置和xml配置实现的功能都是一样的,基本上现在开发都是使用注解

1、@Component

用于创建对象的注解

相当于

<bean id="" class="">

作用: 把资源让 spring 来管理。相当于在 xml 中配置一个 bean。 

属性: value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名。首字母小写。

例子:

还是之前那个User类

用注解实现则只需要通过@Component将该类的对象注入进IOC容器中

然后我们需要在beans.xml文件中进行配置来扫描所有使用注解的类

关键词:component-scan

下为beans.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">
​
     <!-- 扫描注解类 -->
    <context:component-scan base-package="practice"/>
</beans>

 如此便可以实现扫描所有使用注解的类


2、@Component衍生的注解

除了上面使用到的Component注解外还有几个常用的注解: @Component: 用于任意类的注入 @Repository: 用于标识在dao类上 @Service: 用于标识在Service类上 @Controller: 用于标识在控制器类上

P.s. 使用方式和@Component一样

3、用于注入数据的注解——@Autowired

@Autowired是按照Bean的类型,从IOC容器中获取对象进行装配P.s. @Autowired功能和另一个注解@Resource 相似,他们之间的不同点根据我的理解在于

@Autowired是根据类名进行扫描查询,如果是同类则根据名称查询

@Resource 则是单纯根据名称进行扫描和查询

他们主要多用于业务层内不同业务方法的注入

 

 就像上面两张图的例子,通过使用@Autowired我就不用在UserService中直接创建UserInfo对象而不是传统的new方法创建

4、@ Scope

用于指定bean的作用范围,属性value:指定范围的取值。 常用取值:singleton(单例)、 prototype(多例)和生命周期相关,他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的

5、Spring5的新增注解 @Configuration @ComponentScan  

5.1、@Configuration

用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。 

5.2、@ComponentScan

用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:
<context:component-scan base-package="com "/>是一样的
属性: basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样
语法:
@ComponentScan(basePackages = {"要扫描的包名1","要扫描的包名2",...})
 

上面两个注解可以实现零配置文件实现IOC,具体案例可以参考下面大神的CSDN博客的对应内容,本篇的大部分内容也是我看了他的博客练习总结的

SpringIOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值