目录
2.2.2 在对应的项目的pom文件中添加Spring项目的依赖
1.什么叫Spring
1.1 Spring相关知识
Spring的定义:Spring是包含众多工具方法的IoC容器。
IoC(Inveserion of Control)容器:控制(权)反转的容器(对象的生命周期不通过代码来控制,而是由Spring相关的框架来决定)。
DI(dependency injection)概念:依赖注入。在IoC容器运行期间,动态的将某种依赖关系注入到对象之中。
IoC容器的优点:
可以实现解耦(松耦合)。耦合通常指的是两个或多个系统或组件之间的相互作用关系;解耦就是是减少耦合的过程,使得模块或组件之间的依赖尽可能小。这样可以使得代码更加模块化、灵活、易于维护和扩展。
IoC容器具备的基础功能:
(1)将对象存入到容器中
(2)从容器中取出对象。
使用容器的优点:
将对象存入IoC容器中相当于将以后所需要用到的工具存入仓库中,需要进行使用时直接取,用完在放回仓库中。而不是每次需要进行重新new对象,用完不会进行保存而是进行丢弃,下次使用时再次重新构造。
1.2 Spring 的核心功能
1、控制反转(IOC),传统的JAVA开发模式中,当需要一个对象时,我们使用new活着getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用工厂模式为我们创建了所需要的对象,不需要我们自己去创建了,直接调用Spring提供的对象就可以了,这就是控制反转。
2、依赖注入(DI),Spring使用JavaBean对象的set方法或者带参数的构造方法为我们在创建所需要对象时将其属性自动设置为我们所需要的值的过程,这就是依赖注入。
3、面向切面编程(AOP),在面向对象编程(OOP)中,我们将事务纵向抽成一个个的对象,而在面向切面编程中,我们将一个个的对象某些类似的方面。
2.创建一个Spring项目
2.1 配置国内源
配置国内源的目的是在创建Maven项目时可以更快的配置所需的资源,不需要在需要资源时进行重新配置。
- 在现有的项目中进行配置Maven的Setting的配置,或者选择整体的项目配置。
2、配置的内容都相同。选择自己对相应的Maven包,同时选择对相应的setting.xml文件。配置完成后打应的setting.xml文件位置,更改对应的阿里云镜像资源。
对应的阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2.2 创建一个Maven项目
2.2.1 创建一个空的Mave项目
2.2.2 在对应的项目的pom文件中添加Spring项目的依赖
添加Spring框架的支持(Spring-context、spring-beans)。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
2.2.3 将Bean对象存储至Spring(IoC容器)
- 创建一个bean对象
- 将bean存储至Spring中
在对应的Maven项目下,在对应main.java下创建resources包,在其中配置对应的spring-config.xml文件,配置相对应的spring资源,同时创建一个bean对象,将将bean存储至Spring中。
<?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:content="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">
<!-- 取名用id-->
<bean id = "user" class="com.org.example.User"></bean>
</beans>
2.2.4 获取并使用Bean对象
1、得到Spring上下文对象;
2、通过Spring上下文,获取某一个指定的Bean对象;
3、使用Bean对象
获取Spring上下文的方式有两种,分别为ApplicationContext和BeanFactory。通过这两种方式可以创建相对应的Spring上下文。
import com.org.example.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
//1.先得到spring上下文对象 通过Application获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.得到 Bean
User userBean = (User)context.getBean("user");
//3.使用Bean对象
userBean.say();
}
}
import com.org.example.Student;
import com.org.example.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class App2 {
public static void main(String[] args) {
//1.先得到spring上下文对象(指Spring的当前对象在程序前后都可以得到) 通过BeanFactory获取上下文
BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
//2.获取对象Bean
User userBean = (User) context.getBean("user");
Student studentBean = (Student) context.getBean("student");
//3.使用对象Bean
userBean.say();
studentBean.say();
}
}
注意:
1、在使用原类型进行接收时,利用ApplicationContext和BeanFactory创建的spring上下文不属于该类型,因此需要进行类型转化。
2、ApplicationContext和BeanFactory有什么区别
相同点:都是容器管理对象,都可以获取Bean对象。
区别:
- ApplicationContext属于BeanFactory的子类,ApplicationContext拥有更多的功能。
- 加载Bean机制不同:BeanFactory属于按需加载(使用一个加载一个),ApplicationContext一次性加载完所有的Bean对象。
2.2.5 GetBean用法
- 根据名称获取bean对象
- 根据类型获取bean对象
- 根据名称+类型获取bean对象
(1)根据名称获取bean对象属于对号入座,使用谁就为谁。
(2)跟卤类型获取bean对象存在风险,如果只有一个实例,那不会出错,若当同一个类型注入到Spring多个的情况下,那么使用类型获取Bean就会出错。
(3)使用名称+类型获取bean对象是最安全的一种方式,可以准确的找到该bean对象,不会出现多个同类型注入分不清的问题。