Spring 框架入门(1)

一.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();

    }


}

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>

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();
    }
}

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();

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值