Spring框架概述

  • 1.sping
  • 1.1 什么是spring
  • 1.2 spring的优点
  • 2.spring IOC(依赖注入)
  • 2.1 导入jar包
  • 2.2创建类
  • 2.2.1
  • 3.ApplicationContext
  • 3.1 加载配置文件的方法
  • 3.1.1 ApplicationContext 三个常用实现类:
  • 3.1.2 核心容器的两个接口
  • 4.创建bean的三种方式
  • 5.bean的作用范围
  • 5.1 bean标签的scope属性:
  • 6.bean对象的生命周期


1.sping

1.1 什么是spring

  1. Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
  2. 分层: 一站式,每一个层都提供的解决方案
  1. web层:struts,spring-MVC
  2. service层:spring
  3. dao层:hibernate,mybatis

1.2 spring的优点

  1. 方便解耦,简化开发 (高内聚低耦合)
  2. AOP编程的支持
  3. 声明式事务的支持
  4. 方便程序的测试
  5. 方便集成各种优秀框架
  6. 降低JavaEE API的使用难度

2.spring IOC(依赖注入)

2.1 导入jar包

所需jar包:
spring-context.jar
spring-aop.jar
spring-beans.jar
spring-core.jar
spring-expression.jar
commons-logging.jar

2.2创建类

目录结构如下:

spring依赖包怎么下载 spring框架依赖_spring

2.2.1

1.创建IAccountDao接口

public interface IAccountDao {
    /**
     * 保存账户信息
     */
     void saveAccount();
}

2.创建AcountDaoImpl类实现IAccountDao接口

public class AccountDaoImpl implements IAccountDao {
    public void saveAccount() {
        System.out.println("成功保存账户!");
    }
}

3.创建IAccountService接口

public interface IAccountService {
    /**
     * 保存账户
     */
    void saveAccount();
}

4.创建applicationContext.xml文件
<bean>标签里面的id属性最好与类名一致,class属性里面填创建该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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 把对象的创建交给spring管理-->
    <bean id="accountService" class="com.lby.service.impl.AccountServiceImpl"/>
    <bean id="accountDao" class="com.lby.dao.impl.AccountDaoImpl"/>

</beans>

5.创建AccountServiceImpl类实现IAccountService接口

public class AccountServiceImpl implements IAccountService {
    public void saveAccount() {
    	//加载配置文件applicationContext.xml
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        //创建配置文件applicationContext.xml中<bean>标签里面id叫accountDao的对象
        IAccountDao iAccountDao = (IAccountDao) applicationContext.getBean("accountDao");
        iAccountDao.saveAccount();
    }
}

6.测试
创建一个测试类

public class test {
    public static void main(String[] args) {
     	//加载配置文件applicationContext.xml
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        //创建配置文件applicationContext.xml中<bean>标签里面id叫accountService的对象
        IAccountService accountService=(IAccountService)applicationContext.getBean("accountService");
        //创建配置文件applicationContext.xml中<bean>标签里面id叫accountDao的对象
        IAccountDao iAccountDao=(IAccountDao)applicationContext.getBean("accountDao");
        System.out.println(accountService);
        System.out.println(iAccountDao);
        accountService.saveAccount();

    }
}

运行界面:

spring依赖包怎么下载 spring框架依赖_配置文件_02


可以看到成功输出对象的地址,说明创建对象成功,对象也成功的调用了方法。

3.ApplicationContext

3.1 加载配置文件的方法

3.1.1 ApplicationContext 三个常用实现类:

1.ClassPathXmlApplicationContext(“XXX”):可加载类路径下的配置文件

//加载配置文件applicationContext.xml
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

2.FileSystemXmlApplicationContext(“XXX”):可加载磁盘任意路径下的配置文件(必须有访问权限)

ApplicationContext applicationContext=new FileSystemXmlApplicationContext("D:\\work\\SpringDemoday01\\src\\main\\resources\\applicationContext.xml");

3.AnnotationConfigApplicationContext():用于读取注解创建容器

3.1.2 核心容器的两个接口

1.ApplicationContext(常用)
构建核心容器,创建对象采用立即加载的方式,一读取完配置文件马上就创建配置文件中配置的对象
2.BeanFactory
创建对象采用延迟加载方式,什么时候根据bean标签里面的id获取对象,什么时候创建对象

4.创建bean的三种方式

1.<bean id="" class=""/><bean>中只有id,class属性,采用默认构造函数,没有默认的构造函数则无法创建对象
2.使用工厂中的静态方法创建对象
步骤:
a.创建工厂

public class MyBeanFactory {

    /**
     * 创建实例
     * @return
     */
    public static IAccountService createService(){
        return new AccountServiceImpl ();
    }
}

b.applicationContext.xml配置

<!--
	将静态工厂创建的实例交予spring 
	class确定静态工厂全限定类名
	factory-method确定静态方法名
	
	    -->

    <bean id="accountService" class="com.lby.factory.MyBeanFactory" factory-method="createService"></bean>

3.使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器中)

步骤:
a.创建工厂

public class MyBeanFactory {
   /**
    * 创建实例
    * @return
    */
   public IAccountService createService(){
      return new AccountServiceImpl ();
   }
}

b.applicationContext.xml配置

<!--创建工厂实例 -->
<bean id="myBeanFactory" class="com.lby.factory.MyBeanFactory"></bean>
<!-- 获得userservice  
factory-bean 确定工厂实例
factory-method 确定普通方法
  -->
<bean id="accountService " factory-bean="myBeanFactory" factory-method="createService"></bean>

5.bean的作用范围

5.1 bean标签的scope属性:

singleton:单例对象
prototype:多例对象
request:作用于web应用请求范围
session:作用于web应用会话范围
gloable-session:作用于集群环境的会话范围(全局会话范围)

6.bean对象的生命周期

单例对象:容器创建时出生(生命周期和容器一样)
多例对象:
出生:使用对象时创建
活着:使用过程中
死亡:当对象长时间不使用,由java垃圾回收机制清理