1.什么是Spring
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2.什么是控制反转
控制反转(Inversion of control)是面向对象编程中的一种设计原则,可以降低代码之间的耦合,在程序开发中,实例的创建不再由调用者管理.而是由Spring容器创建,控制权由程序代码转移到了Spring容器中,控制权发生了反转.
第一步:需要添加springIDE插件,配置相关依赖
<?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-study</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Spring 需要的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- 日志需要的依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
第二步:插件Spring的xml文件
Applications.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
第三步:依赖注入的方式
创建Duck和Duck2类
package frank;
public class Duck {
private String name;
private Integer age;
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Duck{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package frank;
public class Duck2 {
private String name;
private Integer age;
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public Duck2(String n, Integer a) {
this.name = n;
this.age = a;
}
@Override
public String toString() {
return "Duck{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
<!-- 通过bean标签定义bean对象,Spring bean容器是通过id来进行管理得,id相当于bean的名称
Spring可以通过id找到bean对象 如果没有id,默认类名小写为id
默认单例模式-->
<!-- 通过无参得构造方法 创建一个对象,如果该类型没有无参得构造方法就会报错-->
<!--构造方法注入-->
<bean id="bit" class="java.lang.String">
<constructor-arg value="小比特"/>
</bean>
<!--属性注入(setter方法注入)-->
<!-- <bean class="java.lang.String"></bean>-->
<bean id="d1" class="frank.Duck">
<property name="name" value="LadyGaga"></property>
<property name="age" value="18"/>
</bean>
<!--构造方法多属性注入-->
<bean id="d2" class="frank.Duck2">
<constructor-arg name="n" value="烤鸭"/>
<constructor-arg name="a" value="2"/>
</bean>
写一个测试的类
import frank.Duck;
import frank.Duck2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//spring开启容器得方式ApplicationContext 应用上下文(可以配值并管理Bean对象,及其他得工作)
// ClassPathXmlApplicationContext根据classpath路径,指定一个xml文件(配置文件)
// 并根据配置文件完成配置工作创建一个.
ApplicationContext context = new
ClassPathXmlApplicationContext("applications.xml");
//通过bean的名称(id)获取bean对象
String bit =(String) context.getBean("bit");
//String bit2= (String) context.getBean("java.lang.String#0");
System.out.println(bit);
//System.out.println(bit2);
//通过类型获取bean对象
String bit2 = context.getBean(String.class);
System.out.println(bit2);
Duck d1 = (Duck) context.getBean("d1");
System.out.println(d1);
Duck2 d2 = (Duck2) context.getBean("d2");
System.out.println(d2);
}
}