zoukankan      html  css  js  c++  java
  • Spring 入门

    spring简介

    Spring 是于 2003 年兴起的一个轻量级的Java 开发框架,创始人是Rod Johnson,它是为了解决企业应用开发的复杂性而创建的,随着时代的发展,spring旗下发展了很多项目,并且越来越多的开发者开始使用这些项目。spring的优点如下:

    • 方便解耦,简化开发(高内聚低耦合),可以将对象依赖关系的维护交给Spring管理。
    • IOC(Inversion of Control)控制反转,对象的创建由spring完成,并将创建好的对象注入给使用者。
    • AOP(Aspect Orient Programming)编程的支持,面向切面编程,可以将一些日志,事务等操作从业务逻辑的代码中抽取出来,这样子业务逻辑代码就更加纯净了,并且可以增强日志和事务复用性。
    • 声明式事务的支持,只需要通过配置就可以完成对事务的管理,而无需手动编程。
    • 方便集成各种优秀框架,其内部提供了对很多优秀框架(如:Struts、Hibernate、MyBatis等)的直接支持。
    • 非侵入式,spring的api不会在业务逻辑的代码中出现,倘若有一天项目不使用spring了,那么可以很方便的移植到其他框架上。

    第一个spring程序

    添加依赖jar包
    咱们这里使用spring 5.x的版本,要使用该版本的话,需要保证你的jdk是8以上。

    要想使用spring框架的话,需要添加相关的jar包,在你的pom.xml文件中添加下面依赖即可:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.4.RELEASE</version>
    </dependency>

    添加上面依赖之后,maven会将spring相关的一系列jar包下载到你的本地maven仓库中,这里会用到junit,所以不要把junit的依赖删除。

    创建接口和实现类

    创建一个接口和该接口的实现类:

    package com.monkey1024.service;
    
    public interface StudentService {
    
        void study();
    }

    实现类:

    package com.monkey1024.service.impl;
    
    import com.monkey1024.service.StudentService;
    
    public class StudentServiceImpl implements StudentService {
    
        @Override
        public void study() {
            System.out.println("好好学习天天向上");
        }
    }

    添加spring的配置文件
    在maven项目的resources目录下添加spring配置文件,文件名可以随意命名,这里命名为:applicationContext.xml
    里面需要添加一些xsd,拷贝下面的即可。

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    
        <bean id="studentService" class="com.monkey1024.service.impl.StudentServiceImpl"/>
    
    </beans>

    在该spring配置文件中添加bean标签:

    • id:该属性是Bean的唯一标识,java程序通过id访问该Bean。
    • class:指定该Bean所属的类,这里只能是类,不能是接口。

    创建测试类进行测试
    想要使用StudentService的话,需要开发者自己手动通过new关键字创建该接口实现类的对象。虽然使用了接口可以实现程序的解耦,但是实际上在代码中还是有new StudentServiceImpl的语句,这个地方还是存在一些耦合的。

    使用spring之后,在代码中通过spring获取StudentServiceImpl对象,这样子就去掉了之前代码中的耦合。

    package com.monkey1024.test;
    
    import com.monkey1024.service.StudentService;
    import com.monkey1024.service.impl.StudentServiceImpl;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test01 {
    
        /**
         * 以前的写法:手动创建对象
         */
        @Test
        public void oldType(){
            StudentService studentService = new StudentServiceImpl();
            studentService.study();
        }
    
        /**
         * 使用spring之后的写法:直接通过spring获取对象
         */
        @Test
        public void springType() {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            //从spring中获取对象
            StudentService studentService = (StudentService) context.getBean("studentService");
            studentService.study();
        }
    }

     

    ioc简介

    控制反转(IoC,Inversion of Control),是一种思想。指的是将创建对象的操作权交给容器(例如spring),通过容器来装配和管理对象的创建,控制反转其实就是对这些对象控制权的反转,控制权由程序本身反转给了外部容器。

    ioc是一种思想,有一些实现方式,其中较为常用的一种是依赖注入(Dependency Injection,简称DI),依赖注入是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序,依赖注入让 Spring 的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起。
    在上面的程序中实际上就是使用了依赖注入这种方式获取的StudentServiceImpl对象。

    ioc的另外一个实现方式就是依赖查找,(Dependency Lookup,DL),这里不进行讨论了。

    ApplicationContext接口
    在程序中我们通过ApplicationContext接口获取到spring注入给程序的对象,这里ApplicationContext充当了spring IOC容器的角色,ApplicationContext使用了反射的方式创建bean对象,并且在读取配置文件之后将里面注册的bean全部创建对象。我们可以通过该接口的两个实现类来创建容器:

    • Class Path Xml Application Context

    如果spring的配置文件在项目的类路径下,可以使用该类创建容器

    • File System Xm lApplication Context

    如果spring的配置文件不在类路径下,可以使用该来创建容器

    BeanFactory接口
    我们还可以使用BeanFactory接口充当spring IOC容器的角色,BeanFactory是ApplicationContext的父接口与ApplicationContext不同的是BeanFactory在读取配置文件之后不会创建里面bean的对象,而是在使用的时候才会创建。

    @Test
    public void springType2(){
    
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
        reader.loadBeanDefinitions(new FileSystemResource("F:\monkey1024\ssm\learnspring\src\main\resources\applicationContext.xml"));
        //当使用该bean的时候才会创建其对象
        //StudentService studentService = (StudentService)factory.getBean("studentService");
        //studentService.study();
    }

    用ApplicationContext还是BeanFactory?
    ApplicationContext提供了比BeanFactory更多的功能,在实际工作中除非特殊情况,例如你需要在一些小内存或者资源受限的机器运行程序,这个时候可以选择使用BeanFactory,此时事务的管理、AOP功能将会失效。因此,大部分情况下,建议使用ApplicationContext作为容器。

  • 相关阅读:
    MySQL优化二 缓存参数优化
    Ant Design Pro 学习三 新建组件
    Ant Design Pro 学习二 新建菜单-布局
    因素空间从概率论、模糊集走向人工智能---汪培庄
    纪念L.A. Zadeh教授
    Configure the Stanford segmenter for NLTK
    navicat 连接sqlserver提示要安装 sql server native client
    CentOS6.5+nginx+tomcat负载均衡集群
    CentOS6.5安装mysql5.1.73
    linux64位操作系统装32位jdk解决方法
  • 原文地址:https://www.cnblogs.com/lucky1024/p/11136530.html
Copyright © 2011-2022 走看看