Spring 框架入门

一.Why

1.Spring框架给你提供了很多现有的功能(IoC、AOP、声明式事务等、SpringMVC等)

这些功能可以直接拿来用、提高开发效率

2.进一步提高软件产品的质量

框架是前人对软件开发经验的总结,相当于站在巨人的肩膀上,让一个普通的程序员也能写出高质量的软件成品(符合软件工程的规范,例如高内聚低耦合 OCP等)

不用框架做小的项目没问题,但是做大的项目就需要框架做强大的支持,这一点从MyBatis就可以看出来,如果不用MyBatis,用JDBC做项目太繁琐了

二.what

spring 综合型框架(功能很多) 
这里写图片描述

1.IOC容器 
Inversion Of Control 控制反转

2.对持久层支持(DAO ORM) 
简化hibernate开发(简化jdbc开发) 
声明式事务 
3.web层集成(控制器 jsp) 
自己的MVC框架 spring mvc

整合web层框架 struts1 、struts2、WebWork、JSF等

4.AOP

Aspect Oriented Programming 面向切面编程

切面说白了就是一个类 可以给任何方法前面或后面加方法 拦截器就是一个切面 思想就是AOP思想

5.JEE支持 
JMS即Java消息服务(Java Message Service)

JCA (J2EE 连接器架构,Java Connector Architecture): 用来连接非java语言编写的系统.

Remoting 远程方法调用

EJBs 企业级javaBean 处理分布式业务

Email 邮件

JMX(Java Management Extensions,即Java管理扩展)

三.IOC容器(核心功能)

IOC —> Inversion Of Control —>控制反转

问:什么是容器?

1.集合 list

2.tomcat jsp/servlet容器 只管理jsp servlet对象生命周期(从创建到销毁)

3.spring IOC容器能管理所有对象的周期(从创建到销毁 对象的存取)

问:为什么要使用IOC容器(IOC容器的好处)

1.解耦 (彻底实现OCP) 
2.Inversion Of Control 控制反转 
3.单例

1,如何使用spring

1)导jar包

spring-core-3.2.4.RELEASE.jar 
spring-beans-3.2.4.RELEASE.jar 
spring-context-3.2.4.RELEASE.jar 
spring-expression-3.2.4.RELEASE.jar 
commons-logging-1.1.1.jar

下载:http://download.csdn.net/detail/qq_24082497/9604253

2)举一个简单例子,笔记本换屏,定义类和接口

//接口
public interface IScreen {
     public void display();
}
//14存屏幕
public class Screen14 implements IScreen{

    public Screen14(){
        System.out.println("创建了Screen14对象");
    }

    public void display(){
        System.out.println("使用14寸屏幕进行显示");
    }
}

//14存高分屏
public class RetinaScreen14 implements IScreen{

    public RetinaScreen14(){
        System.out.println("创建了RetinaScreen14对象");
    }

    public void display(){
        System.out.println("使用14寸高分屏显示");
    }
}


//笔记本

public class Notebook {

    private String pinpai;

    private IScreen screen;

    public Notebook(){
        System.out.println("创建了Notebook对象");
    }

    public void setScreen(IScreen screen){
        System.out.println("调用了setScreen方法  设置屏幕");
        this.screen = screen;
    }


    public String getPinpai() {
        return pinpai;
    }


    public void setPinpai(String pinpai) {
        System.out.println("调用setPinpai 设置品牌");
        this.pinpai = pinpai;
    }

    public IScreen getScreen() {
        return screen;
    }

    public void work(){

        screen.display();

    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

3)配置文件

applicationContext.xml java工程放到src下 相当于classes

<?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-2.0.xsd">


    <!-- 使用反射创建对象 -->
    <!--Screen14 screen14 = new Screen14();-->
    <bean id="screen14" class="com.test.Screen14"/>


    <!--Notebook notebook = new Notebook();-->
    <bean id="notebook" class="com.test.Notebook">
        <!-- 
            notebook.setPinpai("联想");
            notebook.setScreen(screen14);
         -->
        <property name="pinpai" value="联想"/>
        <property name="screen" ref="screen14"/>
    </bean>
</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4.测试类

public class Test {

    public static void main(String[] args) {

        //获得spring IOC容器
        //创建对象、设置依赖关系
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //从容器中取id为notebook的对象
        Notebook notebook = (Notebook)context.getBean("notebook");

        notebook.work();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.控制翻转 
Inversion of Control 控制翻转 
1)创建对象的控制权 —–>由程序员 反转给了spring完成 
2)设置依赖关系的控制权利 —–>本来是程序员 notebook.setScreen(screen14);现在交给了spring完成

好处: 
1.不用new 和 set了省事了(框架帮你完成了)

2.解耦(彻底实现OCP)

3.符合现实生活:

控制反转这个名词不太形象,所以spring又换了一种更加形象的解释,叫DI,其实是一个思想,只是DI更好理解罢了。

DI:Denpendency Injection 依赖注入 
有两种注入方式: 
1)setter注入:使用set方法给笔记本的屏幕初始化,告诉笔记本运行时到底依赖于哪个屏幕 Screen14 还是 RetinaScreen14 
2)构造器注入:调用构造方法对属性进行初始化

3.IOC容器的好处之单例

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  Notebook notebook1 = (Notebook)context.getBean("notebook");
  Notebook notebook2 = (Notebook)context.getBean("notebook");

  System.out.println(notebook1==notebook2);//true 证明两次获得的是同一个对象
  notebook.work();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:两次得到的是一个对象 getBean方法只是在容器里取出一开始创建的对象而已,并没有创建对象,创建对象由第一句完成

总结:IOC容器除了是一个普通容器外,主要解决了统一管理对象生命周期、解耦合、维护依赖关系,以及应用程序对单例的大量需要等问题。

推荐一个交流学习群:819940388 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源!



Spring框架是一个开源的Java平台,它最初是为了解决企业应用开发的复杂性而创建的。Spring框架提供了全面的编程和配置模型,能够有效地简化Java应用的开发,是目前最流行的Java框架之一。Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。 入门Spring框架通常包括以下几个步骤: 1. 环境搭建:首先需要安装Java开发环境(JDK)和构建工具(如Maven或Gradle),然后创建一个项目并引入Spring相关的依赖。 2. 了解Spring的IoC容器:控制反转(Inversion of Control,IoC)是Spring框架的核心,它负责创建对象,管理对象的生命周期,以及依赖关系的注入。Spring的IoC容器有两种类型:BeanFactory和ApplicationContext。ApplicationContext是BeanFactory的子接口,提供了更为丰富的功能,如事件传播、资源加载和国际化支持。 3. 掌握依赖注入(DI):依赖注入是实现控制反转的一种方法,可以在运行时动态地将依赖对象注入到对象中。在Spring中,依赖注入可以通过构造器注入、setter方法注入或注解方式实现。 4. 学习Spring的AOP(面向切面编程):AOP是Spring提供的另一个重要特性,它允许开发者将横切关注点(如日志、事务管理等)与业务逻辑分离,从而提高模块化。Spring AOP使用了代理模式来实现AOP。 5. 使用Spring事务管理:Spring提供了对事务管理的全面支持,可以使用声明式事务管理,通过注解或XML配置实现事务控制,也可以使用编程式事务管理,通过代码控制事务边界。 6. 开始编码:根据Spring框架的指导原则和最佳实践,编写业务逻辑代码,使用Spring提供的各种功能来简化开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值