Spring入门

Spring是一个著名的轻量级开源框架,此框架的事一种分层架构,意味着我们能够选择使用其任何部分。其核心是反转控制面向切面编程

Spring优点

  • 方便解耦、低耦合:将对象间的依赖关系交由Spring进行控制,避免硬编码造成的过度程序耦合。
    
  • 声明式事务管理:通过声明式的方式更加灵活地进行事务的管理。
    
  • 方便集成多种优秀框架:提供了对多种优秀框架的支持。
    

控制反转(Inverse of Control – IoC)

控制反转是一种设计思想,IOC把你创建对象的权利交给框架,用于消减程序间的耦合。其主要包括:依赖注入和依赖查找。
传统Java程序设计,我们直接通过new的方式进行对象创建,是程序主动创建依赖对象的。
在这里插入图片描述
引入IoC的程序,IoC通过专门的容器来创建对象。
在这里插入图片描述

IoC实例

  1. 引入Spring的jar包。
    <!--Spring开发包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>
  1. 创建业务层及其实现类
/**
 * 账户的持久层接口
 */
public interface AccountDao {

    /**
     * 保存账户
     */
    void saveAccount();
}
/**
 * 账户持久层接口的实现类
 */
public class AccountDaoImpl implements AccountDao {

    public void saveAccount() {
    	//数据库的操作 用于保存账户
        System.out.println("保存账户");
    }
}
  1. 创建业务层及其实现类
/**
 * 账户业务层接口
 */
public interface AccountService {

    /**
     * 保存账户
     */
    void saveAccount();
}
/**
 * 账户的业务层实现类
 */
public class AccountServiceImpl implements AccountService {

    private AccountDao accountDao;

    public void saveAccount() {
       accountDao.saveAccount();
    }
}
  1. 创建.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--bean标签:用于配置对象,让spring创建,并且存入ioc容器中
        id属性:对象的唯一标识
        class属性:指定要创建对象的全限定类名
    -->
    <!--配置dao-->
  <bean id="accountDao" class="com.liang.dao.impl.AccountDaoImpl"></bean>
    <!--配置service-->
    <bean id="accountService" class="com.liang.service.impl.AccountServiceImpl"></bean>
</beans>
  1. 测试配置是否成功
public class SpringTest {
   @Test
    public void configTest()
    {
        //通过Application接口获取Spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        //根据bean的id获取对象
        AccountService accountService = (AccountService)applicationContext.getBean("accountService");
        System.out.println(accountService);
        
        AccountDao accountDao = (AccountDao)applicationContext.getBean("accountDao");
        System.out.println(accountDao);
    }

通过测试可以看出。没有通过new的方式创建对象,而是在测试方法中创建Ioc容器,通过容器来获取对象的。

IoC容器

BeanFactory 是Spring容器的顶层接口,其下有很多子接口,例如我们上面用到的ApplicationContext接口,而ApplicationContext接口的主要实现类有:

  1. ClassPathXmlApplicationContext:从类的根路径下加载配置文件。 
    
  2. FileSystemXmlApplicationContext:通过磁盘路径加载配置文件,配置文件可以在磁盘任意可访问路径下。
    
  3. AnnotationConfigApplicationContext:使用注解配置容器对象时,需要使用此类创建容器,用以读取注解。
    

bean标签说明

作用: 用于配置对象,让Spring来创建对象并存入到IoC容器中。默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

属性 作用
id 对象的唯一标识符,用于获取对象
class 类的全限定类名,用于反锁创建对象
scope 指定对象作用域 singleton:单例, prototype:多例, request:web项目中的request域, session:web项目的session域
init-method 指定类中的初始化方法名称
destroy-method 指定类中销毁方法的名称

bean创建的对象的作用范围和生命周期
单例对象:scope="singleton:一个应用只有一个实例对象。作用范围为整个应用。单例对象当应用加载,创建容器时,对象就被创建了,只要不销毁容器,对象则一直存在。
多例对象:scope="prototype:每次访问相应的bean时,都会创建对象实例.此方式创建的对象只要对象在使用中,就不会被销毁,当对象长时间不用时,则被java垃圾回收机制回收。
bean创建对象的三种方式
方式一:使用默认无参构造函数

<bean id="accountDao" class="com.liang.dao.impl.AccountDaoImpl"></bean>

如果AccountDaoImpl类没有默认的无参构造函数,则不能用这种方式创建。
方式二:使用静态方法创建对象
如下:当需要获取一个静态方法返回的对象的时候,bean需要配置factory-method属性

public class StaticFactory {
    /**
     * 用于获取AccountService对象
     * @return
     */
    public static AccountService createAccountService()
    {
        return new AccountServiceImpl();
    }
}
 <bean id="accountService" class="com.liang.factory.StaticFactory" factory-method="createAccountService"></bean>

方式三:使用普通话方法创建对象
如下:当需要获取一个普通方法返回的对象的时候,可以先把普通方法所在的类获取到,在结合factory-beanfactory-method属性来获取所需对象。

public class Factory {

    /**
     * 用于获取AccountService对象
     * @return
     */
    public  AccountService createAccountService()
    {
        return new AccountServiceImpl();
    }
}
  <bean id="factory" class="com.liang.factory.Factory"></bean>
    <bean id="accountService" factory-bean="factory" factory-method="createAccountService"></bean>
发布了71 篇原创文章 · 获赞 6 · 访问量 5390
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章