1、spring的下载
spring基本上是每个企业必用的框架,至于spring是干什么的?有什么作用?特点是什么?自行百度,网上一大堆,大同小异。这里变不在啰嗦这些。这里直接从下载框架开始到第一个hello word程序结束。spring的官网地址为https://spring.io/,进入官网之后,点击PROJECT可以找到spring框架的连接,由于spring生态中有很多框架,如果能将所有的框架搞定,也算是大神了。下面粘贴一个下载教程的博客,目前是最新的一种下载方式下载教程。
写hello word程序需要导入基本的jar包,如下:
最后的项目结构如下:
在下载的jar包的zip中有文档,接下来从文档中的提示创建配置文件applicationContext.xml,直接拷贝文档中的xml格式,然后创建文件:
然后创建一个student类,并且将student类配置到配置文件中,并且设置初始值:
配置文件内容如下:
然后是书写测试类:
二、ApplicationContext和BeanFactory的区别
在上面的程序中,使用ClassPathXmlApplicationContext对象来作为初始化容器。其实ClassPathXmlApplicationContext实现了一个接口BeanFactory。那么BeanFactory也可以作为容器。就是BeanFactory接口的实现类所定义的容器对象,代码如下:
@Test
public void test3() {
//第一种获取配置文件的方式
//String configPath = "G:\\laiwenbo\\java\\idea\\spring\\src\\cn\\lwb\\spring\\helloword\\applicationContext.xml";
//Resource resource = new PathResource(configPath);
//第二中获取配置文件的方式
String configPath = "cn/lwb/spring/helloword/applicationContext.xml";
Resource resource = new ClassPathResource(configPath);
BeanFactory beanFactory = new XmlBeanFactory(resource);
Object student = beanFactory.getBean("student");
System.out.println(student);
}
那么在这两种方式中,有什么区别呢?下面在Student类中加上构造方法,
public class Student {
private String name;
private Integer age;
public Student() {
System.out.println("Student对象被创建了.....");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
然后来运行两种方式容器的构造方法:
@Test
public void test4() {
String configPath1 = "cn/lwb/spring/helloword/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configPath1);
//Student student1 = (Student)applicationContext.getBean("student");
System.out.println("===============华丽的分割线=================");
String configPath2 = "cn/lwb/spring/helloword/applicationContext.xml";
Resource resource = new ClassPathResource(configPath2);
BeanFactory beanFactory = new XmlBeanFactory(resource);
//Object student2 = beanFactory.getBean("student");
}
可以发现,在注释掉获取Bean代码的情况下,ClassPathXmlApplicationContext(applicationContext.xml)在初始化创建容器的时候,就创建了配置文件中所定义的Bean。而BeanFactory在初始化容器的时候,并没有创建配置文件(applicationContext.xml)中所定义的对象。那么放开BeanFactory中注释掉的获取Bean对象的代码,再次运行呢?
此时发现配置文件中所定义的student对象被创建了。所以它们的区别是:
- ApplicationContext:在初始化容器的时候,会将所有的Bean(对象)进行创建
- 缺点:占用系统资源
- 优点:响应速度快
- BeanFactory:初始化容器的时候,容器中定义的对象并不会被创建,而是在真正使用的时候被创建。
- 缺点:响应速度慢
- 优点:不多占用系统资源
通常情况下,我们使用ApplicationContext,因为用户的体验才是系统的优劣所在。而对于系统资源来说,我们可以借助硬件来解决。