Spring框架学习(一):为什么使用Spring?什么是IOC、AOP?
本文内容纲要:Spring框架学习(一):为什么使用Spring?什么是IOC、AOP?
这个系列,我们一起学习Spring框架,完全从小白的视角去学习它。在此之前,要先介绍一下几个基础概念,好让你遇到这些关键词时不蒙圈...
1.POJO:老式的Java对象,也可以叫做普通Java对象,什么普通Java对象呢?
public class Student{ private String name;
public Student(){}
//我省略getter and setter,如果想在自己PC上运行,建议每个类的空构造器和setter getter函数都要加上
}
这个例子就是一个普通Java对象。
2.容器:Spring有一个很厉害的技能,那就是可以为我们程序猿创建、管理对象,当然了,得你告诉他要创建哪一个类的对象才行。创建完对象之后,对象就存在于Spring的容器之中,我们可以从容器中获取创建好的对象,我们也可把这个容器称作是Spring上下文。
3.依赖注入:上面说了,Spring可以为我们创建对象,那对象间的依赖关系是如何实现的呢?作为一个优秀的程序猿,不要问我什么是依赖关系...。依赖关系就好比,使用Mybatis的时候,你需要配置SqlSessionFactoryBean,而这个类的一个属性是DataSource的引用,所以你需要创建一个DataSource的对象,并通过set方法或者别的方式传递给SqlSessionFactoryBean。有点扯远了,Spring可以为我们创建对象,我们也可以配置对象的依赖关系,将一个对象注入到另一个对象中。Spring还可以实现自动注入,好比我举的Mybatis例子,如果容器中有DataSource对象,也有SqlSessionFactoryBean对象,开启自动创配模式,可以实现对象的依赖自动注入。
展示一个小例子:学生做作业。一共是三个类,Student.java、Homework.java、App.java。还有一个Spring的配置文件:appContext.xml。要运行这个例子,需要引入Spring框架,我会在后面教大家如何创建基于Spring框架的Java项目。在这个例子中,学生要做的是看一下作业是什么,学生类依赖作业类。
public class Student { private String name;
private Homework homework;
public Student(){}
public Student(String name, Homework homework) {
this.name = name;
this.homework = homework;
}
public void doHomeWork(){
System.out.println(homework.getContent());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Homework getHomework() {
return homework;
}
public void setHomework(Homework homework) {
this.homework = homework;
}
}
public class Homework {
private String content;
public Homework(){}
public Homework(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml");
Student student = context.getBean(Student.class);
System.out.println(student.getName()+"的作业是:");
student.doHomeWork();
}
}
<?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="student" class="demo1.Student">
<property name="name" value="小明"></property>
<property name="homework" ref="homework"></property>
</bean>
<bean id="homework" class="demo1.Homework">
<property name="content" value="how to calc 3+2 ?"></property>
</bean>
</beans>
启动App.java中的main方法,控制台得到这样的消息:
xml配置文件暂时不用过多解释,从man方法中我们可以看到,程序读取了xml配置文件,从上下文中拿到了Student对象并调用了相关方法。整个过程,我没有手动的去创建Student对象和Homework对象,但是我却可以使用它们,这要归功于Spring。
4.IOC(控制反转):我的理解,对象创建控制权的反转。如果没有使用Spring,我要让学生做作业,我需要创建学生类和作业类,使用Spring的话,创建对象的权力交给Spring。不只是创建,bean的整个生命周期都由Spring管理。从此程序猿变成一个“伸手党”,只管向Spring容器要创建好的对象即可。
**5.AOP(面向切面编程):**不要被这个花哨的词语吓到,面向切面编程其实就是提取程序执行流程中的公共部分做统一处理,从横向来看各个模块之间是否有共同的地方。比如同一个系统中的很多模块都要做事务管理,我们就可以使用AOP简化开发。
回归主题,为什么选择使用Spring?下面一一段回答摘自《Spring实战第四版》
Spring能够简化Java开发,具体体现:
- 基于POJO的轻量级和最小侵入式开发
- 通过依赖注入和面向接口实现松耦合
- 基于切面和管理进行声明式编程
- 通过切面和模板减少样式代码
以上这个4点,如果没有完全理解甚至根本就不理解,没关系,静下心来,多多看例子就明白了,一起加油哦!
本文内容总结:Spring框架学习(一):为什么使用Spring?什么是IOC、AOP?
原文链接:https://www.cnblogs.com/chenyulin/p/11206704.html
以上是 Spring框架学习(一):为什么使用Spring?什么是IOC、AOP? 的全部内容, 来源链接: utcz.com/z/296686.html