Spring_01_概述与Hello world

概述

企业开发中,表现层和持久层中可替换的技术有很多。而在业务层中,基本都是使用Spring。

  • Spring 是轻量级的框架。

轻量级与重量级

1、轻量级是相对于重量级而言的。

轻量级一般就是非入侵性的、所依赖的东西、资源占用非常少、部署简单。

即较容易使用,而重量级正好相反。

2、相比传统的JavaEE项目。(即真正意义上的JavaEE规范,如EJB3.0,JPA,JMX,JMS,JNDI,JSF等)

我们把能直接在Tomcat等,符合Java Servlet规范的Web服务器上,能直接运行的Java应用称为轻量级的JavaEE应用。

一般就意味着以Spring为代表的一些事实上的标准开发框架。

可以说,Spring就是运行在Web服务器中的Application Server。

  • Spring的优点

1、低侵入/低耦合(降低组件之间的耦合度,实现软件各层之间的解耦,)

2、声明式事务管理

扫描二维码关注公众号,回复: 3081011 查看本文章

3、方便集成其他框架

4、降低JavaEE开发难度

5.Spring框架中包括JavaEE 三层的每一层的解决方案 (一站式)

  • Spring是一个容器

Spring是一个IoC/DI/AOP容器。容器就是可以装东西的东西。

Spring就是可以装对象的一个集合(容器)。

IoC:inverse of control,控制反转。简单来说,就是将对象的实例化工作交给容器来完成。

  • 学习版本

spring-framework-4.0.0.RELEASE

spring-framework-3.0.5.RELEASE-dependencies

 

Spring的HelloWorld

IHello接口

public interface IHello {
    void sayHello();
}

IHello接口的实现类Hello

public class Hello implements IHello{
    public void sayHello(){
        System.out.println("你好 师姐");
    }
}
  • 无Spring时的测试代码
public class HelloTest {
    private IHello hello ;
    public HelloTest(){ 
        hello = new Hello();
    }

    @Test
    public void test(){
        hello.sayHello();
    }
}

通常情况下,如果A类依赖于B类,则A类需要负责B类的实例化。

如此,便不能做到真正的解耦。

若通过容器完成对象的实例化,应用从容器中获取接口的实现对象,就可完全的实现接口编程。

  • Spring HelloWorld

1、jar包

spring-beans-4.0.0.RELEASE.jar

lib/spring-core-4.0.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar(依赖包)

2、配置文件

文件名:application.xml或applicationContext.xml

配置文件结构:可查询spring-framework-reference.pdf(电子档P48,纸质P24)

<?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="hello" class="com.hanaii.hello.Hello">
    </bean>
</beans>

3、测试代码

public class HelloTest {
    private IHello hello ;
    public HelloTest(){
        // 资源文件
        ClassPathResource resource = new ClassPathResource("applicationContext.xml");
        // 传入资源文件,创建基于XML的BeanFactory容器
        BeanFactory bf = new XmlBeanFactory(resource);
        // 通过容器获得IHello接口的实现类实例
        hello = bf.getBean("hello", Hello.class);
    }

    @Test
    public void test(){
        hello.sayHello();
    }
}

通过容器获取对象的步骤:

a、创建资源文件(ClassPathResource)

b、创建BeanFactory容器对象。(基于XML,传入资源文件)

c、通过容器对象,根据bean对象的id和类型获取实例。

  • 加载过程分析

1、Spring找到配置文件

2、加载配置文件

3、解析所有的<bean>元素,识别id和class属性

4、通过反射创建实例。Class.forName("className").newInstance();

5、id为key,实例为value。保存在BeanFactory容器中。

6、通过getBean方法获取实例。

  • 总结

1、Spring的本质:将java代码转移到配置文件。

2、默认管理的bean,需要一个无参构造方法。

3、Spring配置的bean,是一个实例,不是类型。

public class HelloTest {
    @Test
    public void test(){
        ClassPathResource resource = new ClassPathResource("applicationContext.xml");
        BeanFactory bf = new XmlBeanFactory(resource);
        Hello h1 = bf.getBean("hello", Hello.class);
        Hello h2 = bf.getBean("hello", Hello.class);
        System.out.println(h1 == h2); // 结果为true
    }
}

猜你喜欢

转载自blog.csdn.net/hanaii/article/details/82423598