Spring Ioc入门

Spring概述

学习spring之前,先要了解什么是spring,简单理解就是,spring是一个分层的JavaSE框架。

WEB层SpringMVC
service层Spring的Bean管理,Spring声明式事务
DAO层spring的JDBC模板

Spring IOC

IOC控制反转

IOC控制反转是一种设计理念,不是一种设计技术,是由代理人来创建和管理对象,消费者通过代理人来获取对象。IOC的目的就是降低对象之间的直接耦合。

控制反转:将对象的创建权反转给Spring

下图解释:
将苹果采购,创建的权力由最原始的消费者转嫁给了代理人。 顾客需要什么样的苹果,只需要找果商要就行。
在这里插入图片描述

DI依赖注入

IOC是一种设计理念,与语言无关。但是放在某一种语言下该如何实现IOC呢?这里就需要依赖注入(DI)。DI在Java中利用反射技术实现对象注入。

Spring框架

Spring官网:(国外网)

https://spring.io/

Spring的技术栈:
SPringle生态
在这里插入图片描述
在这里插入图片描述

Spring IOC容器

传统的开发方式:

因为对象之间往往存在引用关系,而这些对象都是new出来的,程序难以扩展维护。
在这里插入图片描述

IOC容器

IOC容器是Spring生态的地基,用于统一创建与管理依赖。
将A的依赖B注入到A中,这里的注入主要是靠反射技术实现的。

在这里插入图片描述

代码实现spring Ioc

创建一个maven工程:
在这里插入图片描述
在这里插入图片描述

在Java文件夹下创建两个实体类:apple 和Child
分别编写类的属性,并设置geter和seter;
为了方便对象实例化,为其书写带参的构造方法。
在这里插入图片描述

测试结果:
在这里插入图片描述
这样写存在的问题:
苹果的信息是固定的,属性变化后,就需要修改程序的源代码。如果有了新苹果,就需要new新的对象,这样的程序,健壮性是差的。

将上面的代码用Spring IOC编写

注入依赖
在这里插入图片描述
在这里插入图片描述
创建一个applicationContext.xml配置文件
在这里插入图片描述
在这里插入图片描述
配置文件中的代码

这个操作就是让idea知道该工程是spring,并且idea为spring提供了一系列的优化。
在这里插入图片描述
其XML文件的内容头为schema约束。
在这里插入图片描述

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

编写xml标签

在ioc容器启动时,自动由Spring实例化Apple对象,取名为sweetApple放入容器中

 <!--在ioc容器启动时,自动由Spring实例化Apple对象,取名为sweetApple放入容器中-->
    <bean id="sweetApple" class="com.imooc.spring.ioc.entity.Apple">

    </bean>

在这里插入图片描述
在这里插入图片描述
使用上述这种方式的优点就是,只需要更改配置文件的内容即可,源代码文件不需要做任何调整。
在这里插入图片描述
编写测试类:

在这里插入图片描述
代码要想运行成功,这里的两个值要对应。
在这里插入图片描述

总结

学习到这里,大概就算入门Spring IOC啦(你可拉到吧!!!)

详解Spring

依赖于注入的区别

继承:

Class A{

}
Class B extends A{

}

依赖:
在这里插入图片描述

XML管理对象(Bean)

三种配置方式
在这里插入图片描述

基于XML配置Bean

  • 创建ApplicationContext.xml文件
    -通过 bean id=“lily” class=“com.imooc.spring.ioc.entity.Child” 这个标签。Spring就知道创建一个IOC容器时,要先实例化一个Apple对象。
- <bean id="lily" class="com.imooc.spring.ioc.entity.Child">
        <property name="name" value="莉莉"></property>
        <property name="apple" ref="softApple"></property>
    </bean>
  • 创建ApplicationContext对象,该对象有很多实现类,其中最主要的是ClassPathXmlApplicationContext。

  • ClassPathXmlApplicationContext(“classpath:applicationContext.xml”)实现了从当前内路径读取指定XML文件,并解析加载。

    在这里插入图片描述
    使用构造参数来实现对象实例化:
    在这里插入图片描述

基于工厂化实例对象

工厂:隐藏创建类的细节,通过额外的工厂类来组织创建我们需要的对象。

首先创建一个Factory类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

id和name属性相同

bean id与name都是设置对象在ioc容器中的唯一标识。

两者在同一配置文件中都不允许出现重复。

两者允许在多个配置文件中出现重复,新对象覆盖旧对象。

路径匹配表达式

在这里插入图片描述

对象属性注入的三种方式

如何在spring Ioc容器中注入对象的依赖关系。
在这里插入图片描述
上面已经学会使用IOC容器实现单个对象的实例化。
child对象要依赖于apple,方法就是由ioc容器先单独创建出Child和apple,来动态的进行依赖的注入。
这里的依赖注入就是将两个对象关联起来。

构造方法的方式进行属性注入

下面代码只能通过构造方法来进行赋值,没有书写set方法。

com.gx.spring.demo.Car
public class Car {
	private String name;
	private Double price;
	
	public Car(String name, Double price) {
		super();
		this.name = name;
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car [name=" + name + ", price=" + price + "]";
	}
}

构造方法的属性注入
constructor-arg 标签用于配置构造方法的属性注入
name :参数的名称
value:设置普通数据
ref:引用数据,一般是另一个bean id值

<!-- 构造方法的方式 -->
	<bean id="car" class="com.gx.spring.demo.Car">
		<constructor-arg name="name" value="玛莎拉蒂"/>
		<constructor-arg name="price" value="800000"/>
	</bean>

基于set注入对象

利用setter实现静态数据的注入
Set方法的普通属性注入
property 标签用于配置Set方法的属性注入
name :参数的名称
value:设置普通数据
ref:引用数据,一般是另一个bean id值
在这里插入图片描述

第一步:创建实体类,并编写私有属性,设置相对应的get和set。

在这里插入图片描述

第二步:引入springframework依赖

在这里插入图片描述

第三步:创建spring配置文件

程序运行时,IOC容器自动利用反射机制为其属性赋值。
在这里插入图片描述

第四步:创建应用程序入口Application

只需要下面这句话就能从xml配置文件中提取对象。

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

通过这段代码直接提取配置文件中sweetapple对应id的内容。

Apple sweetApple = context.getBean("sweetApple", Apple.class);

在这里插入图片描述

第五步实现对象之间的关联

在这里插入图片描述

注解的方式进行属性注入

注解的分类

四种组件类型注解–声明当前类的功能与职责


使用注解仍然要创建XML文件,原因是一些基础的配置仍然要在xml文件下写,但是这里的schema配置与之前的有一点不同(具体代码去官网找)

<?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">

    <context:annotation-config/>

</beans>

Spring的注解开发:组件扫描(不使用类上注解的时候可以不用组件扫描)
使用注解方式,需要开启组件扫描< context:component-scan base-package=直接包名或者包名.类名/>,当然开发中一般都是base-package=包名,毕竟这样可以扫描整个包,方便开发
Spring 的注解开发:组件扫描(类上注解: 可以直接使用属性注入的注解)

<!-- Spring 的注解开发:组件扫描(类上注解: 可以直接使用属性注入的注解) -->
<context:component-scan base-package="com.imooc"/>

@Repository注解(持久层)

@Service(用户类)
@Component

在这里插入图片描述
在这里插入图片描述

自动装配注入–根据属性特征自动注入对象(属性注入)

在这里插入图片描述
在创建的对象上面写上@Autowrite注解。测试发现set方法没有执行,也就是对象属性没有注入。
在这里插入图片描述
把@Autowired写在set方法上面。IOC容器会自动按类型进行注入,而把@Autowired放在属性上面则不会执行set方法。
在这里插入图片描述

元数据注解

在这里插入图片描述

scope注解

用于设置该对象在在容器中是单例还是多例
在这里插入图片描述

@value

为某一个属性设置静态属性

欢迎关注渣渣鑫的公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 要从入门到精通Spring,你需要了解Spring框架的基本概念和原理,并学会使用Spring的各个模块。首先,Spring框架是一个轻量级的Java开发框架,主要用于在Java应用程序中实现控制反转(IoC)和面向切面编程(AOP)。Spring框架主要由三个核心模块组成:Spring Core、Spring MVC和Spring Boot。Spring Core是Spring框架的核心,提供了IoC容器和依赖注入功能,它是其他模块的基础。Spring MVC是一种基于Java的Web应用程序开发框架,用于构建灵活和可扩展的Web应用程序。Spring Boot是在Spring基础之上构建的一个扩展,旨在简化开发、测试和部署过程,提供了一种快速搭建应用的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Spring入门到精通](https://blog.csdn.net/qq_40565874/article/details/124337093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Spring框架从入门到精通(纯干货,建议收藏)](https://blog.csdn.net/weixin_44006686/article/details/117676003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [spring入门到精通](https://blog.csdn.net/weixin_51079220/article/details/125833152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空的鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值