Spring框架简单入门

Spring框架的核心技术是IOC(反转控制)和AOP(面向切面编程),它的核心思想是将Spring看成一个容器,对象的创建和销毁等都由Spring来管理。

  1. Spring的优点
  • 方便解耦符合高内聚低耦合,简化开发
  • AOP编程,Spring提供面向切面编程,可以方便的对程序进行监控,权限验证等操作
  • 方便集成其他各种框架,例如Spring集成mybatis、Struts、SpringMVC、SpringData等
  1. 创建一个Spring项目,可以使用传统的引入jar包的方式来创建Spring项目,也可以使用maven或者gradle方式来创建Spring方式,这里只介绍maven方式来创建Spring项目
  • 首先是在maven项目中的pom文件中导入Spring的依赖,导入这个依赖之后,他会自动将Spring的一些核心jar包都引入到项目中
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>

  1. SpringIOC技术,IOC(inversion of Control)控制反转,它其实本质是一种思想。举个例子,假设在service层调用dao层方法,首先得new一个dao层对象,然后再调用这个对象中的一些方法。这种情况就会导致当前service和dao紧密的联合在一起,不方便代码的升级与解耦。使用SpringIOC思想就可以很好的解决这种问题,它的思想就是将需要使用的对象交给Spring来管理,然后需要使用的时候就可以通过Spring来调用。这就相当于我把所有的对象都放在一个大的容器中,然后需要谁我就去拿这个对象,对象和对象之间本身是没有什么关联的。
  • 首先使用xml方式来配置一个对象,首先在resource文件夹下创建一个applicationContext.xml文件
<?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">
    <!--
        spring的核心配置以beans作为根标签。
        在spring中任何的一个类,spring都将其称为一个javabean(pojo)
        因此只要将某个类交给spring去管理,就需要在spring的核心配置文件中
        书写一个bean标签来配置这个需要管理的类
    -->
    <!--
        使用bean标签来配置某个需要spring管理的类:
            需要在bean标签上给当前被管理的这个类起名字,可以使用id属性,也可以使用name属性
    -->
    <bean name="userDao" class="com.spring.dao.UserDao"/>
    <bean name="userService" class="com.spring.service.UserService"/>
</beans>
  • 创建和applicationContext.xml文件中class属性对应的类,这样就代表这个类的控制权交给了Spring
//创建UserDao类
public class UserDao {
    // 添加用户
    public void addUser( ){
        System.out.println("dao层添加用户数据");
    }
}
//创建UserService类
public class UserService {

    // 提供方法
    public void addUser(){
        System.out.println("service层,对用户数据进行逻辑处理");
          /*通过spring容器来管理UserDao类,那么我们在程序中就不用再去创建UserDao的对象
          而是问Spring容器要UserDao的对象。然后通过这个对象,直接调用方法*/
        // 通过ApplicationContext接口下的
ClassPathXmlApplicationContext实现类获取到Spring的核心对象
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 从spring容器中拿UserDao
        UserDao dao = (UserDao) context.getBean("userDao");
        /// 调用dao中的方法
        dao.addUser();
    }
}
  1. Spring中的DI依赖注入,将一个对象注入到另一个对象,假如在service层需要使用到dao层的对象,就需要使用DI依赖注入,将DAO层的对象注入到service层,非注解可以采用构造方法将DAO层对象注入到service层。使用注解方式可以在service层的成员变量上添加@Autowried注解
  2. DI和IOC的区别,本质上没有什么区别都是使用Spring来创建,管理,销毁一个对象。IOC主要体现在对象的创建,控制,销毁都交给Spring这个容器。DI主要是强调对象之间的调用。
  3. Bean实例化的4种方法
  • 第一种是无参数构造方法Bean实例化,如果没有给无参数的构造犯法,那么会有默认的无参数构造方法。将这个类所在的包名类名配置到XML文件中的Bean标签中,Bean标签中的id对应着当前这个类的唯一标识,class对应着当前这个类所在的包名
  • 第二种是静态工厂方法,在一个类中书写静态方法,这个方法返回某个Bean对象,同样将当前这个静态工厂和静态方法配置到XML文件中,id代表着当前这个静态方法返回的对象的唯一标识,class对应着这个静态工厂所在的包名,还需要使用factor-method属性定义当前这个静态工厂中哪个方法需要实例化
  • 第三种是实例化工厂方法,在一个类中定义一个非静态的方法,这个方法的返回需要实例化的Bean,在xml文件中需要配置两个Bean标签,第一个是将当前这个实例化工厂实例化,然后再将这个实例化工厂中的方法实例化。在xml文件中先通过class和id属性实例化这个工厂,再在Bean标签内使用factory-bean属性注入实例化工厂的id和factory-method属性填写需要被实例化的对象方法。
  • 第四种方式FactoryBean方式,它是Spring专门提供的一个接口,这个接口就是用来实例化Bean对象的,使用时首先编写实现类,并复写其中的getObject方法,这个方法的返回的就是需要被实例化的对象。
  1. FactoryBean和BeanFactory的区别,FactoryBean是用来实例化Bean对象,BeanFactory是用来加载Spring的核心配置文件的,因为BeanFactory是ApplicationContext的父接口,所以在类中加载Spring的核心配置文件的时候,可以使用BeanFactory,也就是多态的原理。
  2. Spring中Bean的作用域,开发中常用的有singleton单例,和Prototype多例两种。单例就是在Spring容器中只有一个实例对象,多例在每次获取Bean对象的时候,都是一个新的对象。
  3. Bean的生命周期,一个实例化对象的生命周期都是交给Spring来管理的,但是可以在Spring的xml文件中配置bean的初始化和销毁方法,在xml文件Bean标签中可以使用init-method和destroy-method来指定bean的创建和销毁的时候执行的方法。需要注意的是,bean的销毁必须要求当前的Bean对象是单例的,而且Spring容器要手动关闭。
  4. Bean的属性注入,也就是说,一个对象它可能存在初始属性,比如一个User对象,它必然存在name,sex,number等属性。有一下三种方法可以对bean属性进行注入。
  • 第一种方法是构造方法注入,在需要被注入属性的类中添加有参的构造方法,然后在xml文件bean标签中使用constructor-arg标签来为当前类的成员变量注入属性值。
  • 第二种就是使用set方法注入,给这个类添加set方法,在xml文件Bean标签中使用property标签给这个类的成员变量注入属性。
  • 第三种是给一个类中有集合类型的成员变量,并给其注入属性值。同样在xml文件中使用property标签定义需要给当前哪个成员变量注入属性,然后再在property内使用list标签下的的value标签给当前这个list注入多个属性值。
  1. spring的注解使用

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×