Spring-Spring、IoC、DI、注解开发

1、Spring是什么

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
Spring整体架构

Spring优点:

  • Spring属于低侵入设计。
  • IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务逻辑。
  • 提供面向切面编程
  • 对各种主流插件提供很好的集成支持。
  • 对事务支持的很好,只要配置即可,无须手动控制

缺点:

  • 依赖反射,影响性能

以前所有东西都是由程序去进行控制创建,耦合性太高(模块与模块之间的依赖性太强,需求改一个模块,实际需要改好几个模块),而现在是由我们自行控制创建对象 , 把主动权交给了调用者。程序不用去管怎么创建,怎么实现了。它只负责提供一个接口

问题:耦合度高

解决办法:使用对象时,在程序中不要主动使用new产生对象,转换由外部提供对象

2、IOC

控制反转IoC(Inversion of Control),是一种设计思想(对象的产生控制权由程序转移到外部)

控制:谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring(core containner)来创建的

反转:程序本身不创建对象 , 而变成被动的接收对象

Spring对IoC思想进行了实现

  • Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的"外部"
  • IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
  • 如果两个bean之间有关系,进行DI(依赖注入)

2.1、使用IoC

  • 在resources路径下创建applicationContext.xml配置文件
java 复制代码
<?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="stu" class="com.zyh.pojo.Student"></bean>
</beans>
  • IOC容器通过读取配置文件,加载配置bean标签来创建对象(在核心容器中创建好bean对象后,就放在核心容器中,需要使用的时候再拿出去用)
  • 读取配置文件
java 复制代码
//读取配置文件
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student stu = applicationContext.getBean("stu", Student.class);
        System.out.println(stu);

2.2、IoC容器创建bean(实例化bean)的三种方法

  • 无参构造函数:构造方法(常用),无参构造方法如果不存在,将抛出异常BeanCreationException
java 复制代码
<bean id="bookDao" class="com.src.dao.impl.BookDaoImpl"/>
  • 静态工厂
java 复制代码
<bean id="bookDao" class="com.src.factory.OrderDaoFactory" factory-metod="getOrderDao"/>
  • 实例工厂:先造出工程实例对象
java 复制代码
<bean id="userFactory" class="com.src.factory.userDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory">

2.3、Bean生命周期

  • 初始化容器

    1.创建对象〔内存分配)

    2.执行构造方法

    3.执行属性注入( set操作,依赖注入)

    4.执行bean初始化方法

  • 使用bean

    1.执行业务操作

  • 关闭/销毁容器

    1.执行bean销毁方法

3、DI

依赖注入(Inversion of Control)在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

  • setter注入
    在bean中定义引用类型属性并提供可访问的set方法
java 复制代码
public class BookSeviceImpl implements BookService{
	private BookDao bookDao;
	public void setBookDao(BookDao bookDao){
		this.bookDao = bookDao;
	}
}

配置中使用property标签ref属性注入引用类型对象

配置中使用property标签value属性注入简单类型对象

java 复制代码
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl">
	<property name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">
  • 构造器注入
    配置中使用constructor-arg标签ref属性注入引用类型对象
java 复制代码
public class BookSeviceImpl implements BookService{
	private BookDao bookDao;
	public BookServiceImpl(BookDao bookDao){//构造方法
		this.bookDao = bookDao;
	}
}
java 复制代码
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl">
	<constructor-arg name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">

3.1 自动装配

IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

1、自动装配用于引用类型注入,不能对简单类型进行操作

2、使用按类型装配(byType)必须保障容器中相同类型的bean唯一,推荐使用

3、使用按名称装配(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐

4、自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

4、注解开发

在类上加上@Component就相当于对这个类定义为bean了

需要在配置文件中加上<context : compontent-scan base-package="com.org.example">

Spring提供@Component注解的三个衍生注解

  • @Controller:用于表现层bean定义
  • @Service:用于业务层bean定义
  • @Repository:用于数据层bean定义
相关推荐
源码12159 分钟前
ASP.NET MVC宠物商城系统
后端·asp.net·宠物
Ai 编码助手1 小时前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm1 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm1 小时前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database
尼克_张1 小时前
tomcat配合geoserver安装及使用
java·tomcat
杜杜的man1 小时前
【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
开发语言·后端·golang
wywcool1 小时前
JVM学习之路(5)垃圾回收
java·jvm·后端·学习
-seventy-2 小时前
Java Web 工程全貌
java
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
idea 删除本地分支后,弹窗 delete tracked brank
java·ide·intellij-idea
言慢行善2 小时前
idea出现的问题
java·ide·intellij-idea