没有Spring之前是怎么开发的?
没有Spring框架之前,所有的javaWEB开发都是非常繁琐的,且十分冗余,哪里需要实例化对象,就直接new一个处理,同时还需要一个一个set属性值,或者不想满项目中都是new的话,自己实现一个单例工厂来创建获取,但是这种类太多了,那么就需要更多的单例工厂。
以前的Servlet开发需要手动实现javax.servlet.Servlet,一般项目都有很多功能,每一个功能类都对应一个servlet类,于是就有很多重复的代码,比如service,init,destroy等等.还要在配置文件中加入很多servletMapping。
有了spring之后,就不需要做这些繁琐的事情,让程序员更加专注于业务的开发,真正解放了生产力。
本系列主要分析Spring的IOC、AOP、事务源码
Spring IOC支持XML配置和注解,我们先分析XML,后面再分析注解
先从简单的Demo来入手,首先可以参考网上一些资料搭建一个Spring项目,或者从https://spring.io/上直接生成一个项目并下载下来。
下面我们就一起来一个Spring初体验
1、创建Dog类:
@Data
public class Dog {
private String name;
private int age;
}
2、在项目resouce目录下新增spring-application文件,并增加红框中的信息
![](https://img-blog.csdnimg.cn/img_convert/55787d75edfd4d1dbf522fc65ca5e1d6.png)
3、接着新建测试类:
public class SpringBeanFactoryDemo {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-application.xml");
Dog dog = context.getBean("dog",Dog.class);
System.out.println(dog);
}
}
4、直接运行main方法,打印以下结果:
![](https://img-blog.csdnimg.cn/img_convert/87ca9598849f472db0cbe1773d66b01b.png)
真很神奇啊,我并没有创建对象,也没有设置对象值,但是我通过xml文件与ClassPathXmlApplicationContext类就能能拿到我想要的对象,我还可以重复的去拿这个对象:
![](https://img-blog.csdnimg.cn/img_convert/8c0abd14104846bf94d8c5900ca4987e.png)
借助jol-core依赖包,我们还可以看出这两个Dog对象的内存地址是同一个,也就是这两个对象是同一个实例。
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.10</version>
</dependency>
![](https://img-blog.csdnimg.cn/img_convert/ab3bc7902278490bb2ce9de5964d0b87.png)
那我们javaWeb开发时,Controller里面有对应的Service类怎么设置呢?别担心可以这样操作:
1、新建Person类:
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
import java.util.Map;
/**
* @ClassName Person
* @Description TODO
* @Author whf
* @Date 2023/1/31 21:35
* @Version 1.0
*/
@Getter
@Setter
@ToString
public class Person {
public String name;
public Integer age;
}
2、修改Dog类:
@Data
public class Dog {
private String name;
private int age;
private Person master;
}
3、修改XML配置:
![](https://img-blog.csdnimg.cn/img_convert/700001fd47394ae4920855e737368751.png)
4、运行原来的SpringBeanFactoryDemo类
![](https://img-blog.csdnimg.cn/img_convert/e5c6f5dbb17044c7822f5f17778b7384.png)
会发现Dog实例中的Person对象(master)已经被实例化了,可以直接使用。
以上就是Spring框架中著名的IOC和DI,我们后面的文章会对Spring这两大功能进行剥茧抽丝,一一进行分析。