提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
1.IOC(Inversion of Control)控制反转
2.DI(Dependency Injection)依赖注入
一、Spring相关概念
Spring是使用JavaEE开发的必备使用技能。Spring可以简化开发,并且可以实现框架整合,高效整合其他及技术。
Spring框架优势主要体现在简化开发 和 框架整合 上,所以这两哥部分是我们学习的重点
- 简化开发:Spring框架中提供可两个大的技术。 IOC 以及 AOP
- 框架整合:Spring如今已经可以整合市面上几乎所有主流框架
二、IOC/DI概念及入门案例
1.IOC(Inversion of Control)控制反转
(1).控制反转:即由主动new创建对象转为由 外部 提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
(2).Spring和IOC之间的关系:Spring技术对IOC思想进行了实现。即Spring提供了一个容器,叫做IOC容器,用来充当 “外部” 。所以IOC思想中的 “外部” 值的就是IOC容器
(3).IOC容器的作用以及内部存放的是什么:
- IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
- 被创建或被管理的对象在IOC容器中统称为Bean
但是,存放在IOC容器中的Bean对象彼此之间并没有任何关系,像这种在容器中建立对象与对象之间的绑定关系就要用到DI
2.DI(Dependency Injection)依赖注入
介绍完Spring的IOC和DI的概念后,我们直到它们的最终作用就是:充分解耦
- 使用IOC容器管理Bean
- 将IOC容器中具有依赖关系的bean进行绑定
- 使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系
三.入门案例
IOC入门案例
需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean
- 创建Maven的java项目
- pom.xml添加Spring的依赖jar包
- 创建BookService,BookServiceImpl,BookDao和BookDaoImpl四个类
- resources下添加spring配置文件,并完成bean的配置
- 使用Spring提供的接口完成IOC容器的创
- 从容器中获取对象进行方法调用
步骤一:创建Maven项目
步骤二:向pom.xml添加Spring的依赖jar包
<?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>org.example</groupId>
<artifactId>Spring-day01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
步骤三:创建BookService,BookServiceImpl,BookDao和BookDaoImpl四个类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
public void save() {
System.out.println("book service save ...");
}
}
步骤四:添加spring配置文件
步骤五:在配置文件中完成bean的配置
<?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="bookDao" name="bookDaoImpl" class="com.Impl.dao.BookDaoImpl"/>
<bean id="bookService" class="com.Impl.dao.BookServiceImpl"/>
</beans>
我们此时可以使用 name标签 对bean起别名,我们也可以通过name 获取bean
注意事项:bean定义时id属性在同一个上下文中(配置文件)不能重复
步骤六:获取IOC(使用Spring提供的接口完成IOC容器的创建)
public class Test {
public static void main(String[] args) {
//获取对应的IOC容器
ApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
步骤七:从容器中获取对象进行方法调用
public class Test {
public static void main(String[] args) {
//获取对应的IOC容器
ApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookdao = (BookDao)ctx.getBean("bookDao");
bookdao.save();
}
}
DI入门案例
步骤一:去除代码中的new
public class BookServiceImpl implements BookService{
//删除业务层中使用new的方式创建Dao对象
//private BookDao bookdao = new BookDao();
private BookDao bookDao;
@Override
public void save() {
System.out.println("Book Service save~");
}
}
步骤二:为属性提供setter方法
public class BookServiceImpl implements BookService{
//删除业务层中使用new的方式创建Dao对象
//private BookDao bookdao = new BookDao();
private BookDao bookDao;
@Override
public void save() {
System.out.println("Book Service save~");
}
public void setBookDao(BookDao bookDao){
this.bookDao = bookDao;
}
}
步骤三:修改配置完成注入(在配置文件中添加依赖注入的配置)
<?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="bookDao" class="com.Impl.dao.BookDaoImpl"/>
<bean id="bookService" class="com.Impl.dao.BookServiceImpl">
<!--配置server与Dao的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性 ref属性表示参照哪一个bean -->
<property name="bookDao" ref="bookDao"></property>
</bean>
</beans>
bean作用范围scope配置
定义bean的作用范围,可选范围如下:
- singleton:单例(默认)
- prototype:非单例
示例:<bean id = "bookDao" class = "com.dao.BookDaoImpl" scope = "prototype"/>