spring的作用
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
spring体系结构
Spring特点
控制反转和依赖注入的区别
控制反转IOC(Inverse of Control):将对象的创建权反转给(交给)Spring
依赖注入(DI (Dependency Injection)):从应用程序的角度在描述,应用程序依赖容器创建并注入它所需要的外部资源;
搭建spring的前提条件:
安装好jdk和maven
spring基本配置
父类项目配置xml:
我们使用spring得有业务对象和配置元数据
在父项目创建一个子项目
在子项目中修改xml
创建一个类:
beans配置
app.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">
<!--让springIoc容器 默认是单例模式-->
<bean id="owner" class="org.sl.marhouse.eneities.Owner"></bean>
<!-- <bean id="owner" class="org.sl.marhouse.eneities.Owner" scope="prototype"></bean> 原型,每次使用bean会创建新的对象-->
</beans>
测试:
@Test
public void testSpring(){
//从容器当中获取一个Bean
Owner owner=context.getBean("owner4", Owner.class);
if (owner==null){
System.out.println("没有相应的实例");
}
else {
System.out.println("有响应的实例"+owner.toString());
}
}
@Before
public void init(){
context = new ClassPathXmlApplicationContext("app.xml")
Bean作用域:
Bean延迟加载:
bean的默认lazy-init=false,不需要延迟加载,IoC 容器将在服务器启动的时候,会解读ApplicationContext.xml文件,不管你是不是要使用该bean,都会先进行实例化。这会造成启动的时候,特别的慢。但是,也是最保险的方法。
<bean id="owner" class="org.sl.marhouse.eneities.Owner" lazy-init=false</bean>
父项目xml配置:
<?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.sl</groupId>
<artifactId>springdemo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>01-spring-demo</module>
</modules>
<!-- 版本控制-->
<properties>
<spring.version>5.3.10</spring.version>
<lombok.version>1.18.22</lombok.version>
<mysql.version>8.0.26</mysql.version>
<druid.version>1.2.3</druid.version>
<junit.version>4.12</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>9</java.version>
<maven.compiler.source>9</maven.compiler.source>
<maven.compiler.target>9</maven.compiler.target>
</properties>
<!--父项目的包管理,以便使用这个父项目下的子项目(子模块)使用的第三方包-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子项目配置
<?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">
<parent>
<artifactId>springdemo</artifactId>
<groupId>org.sl</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>01-spring-demo</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>9</java.version>
<maven.compiler.source>9</maven.compiler.source>
<maven.compiler.target>9</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
app.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">
<!--让springIoc容器 默认是单例模式-->
<bean id="owner" class="org.sl.marhouse.eneities.Owner"></bean>
<!-- <bean id="owner" class="org.sl.marhouse.eneities.Owner" scope="prototype"></bean> 原型,每次使用bean会创建新的对象-->
</beans>
测试:
@Test
public void testSpring(){
//从容器当中获取一个Bean
Owner owner=context.getBean("owner4", Owner.class);
if (owner==null){
System.out.println("没有相应的实例");
}
else {
System.out.println("有响应的实例"+owner.toString());
}
}
@Before
public void init(){
context = new ClassPathXmlApplicationContext("app.xml")