小菜鸟 SSM框架之 Spring复习-01

Spring概述


什么是Spring

​ Spring 是分层的 Java SE/EE 应用 full-stack (一站式)轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

Spring 框架的优点

  • 非侵入式设计
  • 方便解耦、简化开发
  • 支持aop
  • 支持声明式事务处理
  • 方便程序测试
  • 方便集成各种优秀框架
  • 降低Java EE API的使用难度

Spring的体系结构

在这里插入图片描述

CoreContainer(核心容器)

Spring的核心容器提供了两种核心容器,分别为BeanFactory和ApplicationContext:

  • BeanFactory

    在实际开发中应用不多仅此了解即可

    BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource(配置文件的路径));
    
  • ApplicationContext

    • 通过ClassPathXmlApplicationContext 创建
    ApplicationContext applicationContext = new ClassPatXmlApplicationContext(配置文件的路径);
    
    • 通过FileSystemXmlApplicationContext 创建

      ApplicationContext applicationContext = new FileSystemXmlApplicationContext(配置文件的路径)
      

Spring 的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块、Context-support模块和SpEl(Spring Expression Language , spring语言表达式):

  • Beans 模块:提供了BeansFactroy,是工厂模式的经典实现,Spring将管理对象称为对象
  • Core 核心模块:提供了Spring框架的基本组成部分,包括Ioc 和 DI功能
  • Context 上下文模块:建立在Core、Beans模块的基础之上,他是访问定义和配置任何对象的媒介。其中ApplicationContext 接口是上下文模块的焦点
  • Context-support 模块:提供了对第三方库的嵌入Spring应用的集成支持

Data Access/Integration (数据访问/集成)

依赖注入(Dependenc Injection)

​ 依赖注入的实现方式有两种分别是:属性setter方法注入、构造方法注入。

  • 属性setter方法注入:指Spring容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean 后,调用该Bean 的setter 方法,即可实现基于setter 方法的依赖注入。

  • 构造方法的注入:指 Spring容器中使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每一个参数代表着一个依赖。

    创建接口:

    package com.itheima.ioc;
    
    public interface UserService {
    	public void say();
    }
    
    package com.itheima.ioc;
    
    public interface UserDao {
    	public void say();
    }
    

    创建接口的实现类:

    package com.itheima.ioc;
    
    public class UserServiceImpl implements UserService {
    
    	private UserDao userDao;
    	//添加UserDao的属性的setter方法,实现依赖注入
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    	
    	@Override
    	public void say() {
    		// TODO Auto-generated method stub
    		//调用userDao中的say方法
    		this.userDao.say();
    		System.out.println("UserService say Hello World");
    	}
    
    }
    
    package com.itheima.ioc;
    
    public class UserDaoImpl implements UserDao {
    
    	public void say() {
    
    		System.out.println("UserDao say Hello World");
    	}
    }
    
    

    设置配置文件:

    <?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,让spring创建其实例化对象 -->
        <bean id = "userDao" class = "com.itheima.ioc.UserDaoImpl"></bean>
        <bean id = "userService" class = "com.itheima.ioc.UserServiceImpl" >
        	<property name = "userDao" ref = "userDao"></property>
        </bean>
          
    </beans>
    

    创建测试类:

    package com.itheima.ioc;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.context.support.AbstractApplicationContext;
    
    
    public class TestDI {
    	public static void main(String[] args) {
    		//初始化spring容器,加载配置文件
    		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    		//通过容器获取对象,
    		UserService userService = (UserService) applicationContext.getBean("userService");
    		//对象调用say方法
    		userService.say();
    		((AbstractApplicationContext)applicationContext).close();
    	}
    }
    

    运行结果:
    在这里插入图片描述


		在校学习生,不定时更新。还请各位看官谅解。
(参考书籍:JAVA EE 企业级应用开发教程(Spring+SpringMVC+MyBatis))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值