Spring入门(一)-Spring框架简介

3,050 阅读4分钟

Spring框架

Spring框架是java应用最广泛的框架,它的成功来源于理念,而不是技术本身,它的理念包括IoC(Inversion of Control,控制反转)AOP(AspectOrientedProgramming, 面向切面编程)。 Spring是容器框架,用于配置Bean并维护Bean之间的关系的一种框架,Bean是Java中的任何一种对象。

Spring能够:

    1. 能够根据配置文件创建及组装对象之间的依赖关系。
    1. 面向切面编程能够帮我们无耦合的实现日志记录,性能统计,安全控制。
    1. 能非常简单的帮我们管理数据库事务。
    1. 提供了与第三方书库访问框架无缝集成。
    1. Spring能够与第三方wen框架无缝集成,

Spring的框架结构:

  • Data Access/Integeration 层包含有JDBC\ORM\OXM\JMS和Transaction模块
  • Web层包含了Web\Web-Servlet\WebSocket\Web-Porlet模块
  • AOP模块提供了一个符合AOP联盟标准的面向切面编程实现
  • Core Container(核心容器) :包含有Beans、Core、Contenxt和SpEL模块。
    • Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类
    • Beans模块: 提供了框架的基础部分,包括反转控制和依赖注入,其中BeanFactory是容器核心,本质是“工厂设计模式”的实现,所有应用中对象间的关系由框架管理。
    • Context模块,以Core和Beans为基础,继承Beans模块功能并添加资源绑定,数据验证、国际化、javaEE支持,容器生命周期,事件传播等;核心接口是ApplicationContext
    • EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组,容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,他也支持列表投影、选择和一般的列表聚合等。
  • Test模块支持使用Jnint对Spring组件进行测试

IOC和DI简介

IoC: Incerse of Control(控制反转)
控制反转是一种设计思想,就是将原本在程序中手动创建对象的控制权交由Spring框架来管理。也就是说,Spring将我们从盘根错节的依赖关系中解放了。当前对象如果需要依赖另一个对象,只要打一个@Autowired注解,Spring就会自动创建好对象放入到@Autowired标注的变量中。从而实现松耦合。

正控:若要使用某个对象,需要自己去负责对象的创建。
反控:若要使用某个对象,只需要从Spring中获取需要使用的对象,不关心对象的创建过程,也就是把对象的创建过程交给了Spring框架。

DI:Dependency Injection(依赖注入)
DI:Spring创建对象的过程中,讲对象依赖属性(常亮,对象,集合),通过配置设置值给该对象。

###编写一个Spring程序

  • 1、创建Spring项目(这里使用idea)

  • 2、创建lib目录放进必要的jar包,并将lib设为编译目录

这里项目创建完成。

  • 在package[pojo]下新建User类:
package pojo;

public class User {
    private String username;
    private String password;
    private int age;
}
//添加getter and setter方法
  • 在SpringConfig.xml中通过xml配置的方式装配Bean
<?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 name="user" class="pojo.User">
        <property name="username" value="张三"/>
        <property name="password" value="123456"/>
        <property name="age" value="11"/>
    </bean>
</beans>
  • 在package[test]下新建testSpring类
package test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pojo.User;


public class TestSpring {

    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"spring-config.xml"}
        );

        User user = (User) context.getBean("user");
        System.out.println(user.getUsername());
        System.out.println(user.getAge());
        System.out.println(user.getPassword());
    }
}
  • 运行测试代码


  • 在这里,传统的方式是通过new关键字来主动创建一个对象。
    IOC方式 为由Spring来创建对象。直接从Spring中获取一个对象。IOC控制反转就是将本来自己new出对象改为从Spring中获取对象。从而实现了低耦合。

继续上面的项目

  • 在pojo下创建一个LoginService类:
package pojo;

public class LoginService {

    // 唯一关联了一个 Source 对象
    private User user = null;

    /* setter and getter */

    public String makeJuice(){
        String str = "xxx用户名:"+user.getUsername()+"密码:"+user.getPassword()
                +"年龄:"+user.getAge();
        return str;
    }
}
  • 在xml文件中配置LoginService对象:
<?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 name="user" class="pojo.User">
        <property name="username" value="张三"/>
        <property name="password" value="123456"/>
        <property name="age" value="11"/>
    </bean>
    <bean name="loginService" class="pojo.LoginService">
        <property name="user" ref="user" />
    </bean>
</beans>
  • 在[testSpirng]中添加以下代码
public class TestSpring {

    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"spring-config.xml"}
        );

        User user = (User) context.getBean("user");
        System.out.println(user.getUsername());
        System.out.println(user.getAge());
        System.out.println(user.getPassword());

        LoginService loginService = (LoginService) context.getBean("loginService");
        System.out.println(loginService.makeLogin());
    }
}
  • 运行测试代码

  • 注: 在这里,传统的方式需要new来获取对象再用=运算符将对象引用赋值给变量。
    而当这里使用了ioc来管理对象时,使用DI来注入对象,通过xml文件配置注入。