Spring

1.Spring简介-Spring Framework架构

1) Spring Framework 由什么构成?

IoC(控制反转,解决代码耦合)和AoP (面向切面编程,解决代码重复编码)核心思想

1. 底层 IoC 核心容器
Beans (实例化对象定义)
Core
Context
Spring El 表达式
2. 中间层技术
AOP 编程( Spring 自身提供 AoP 实现)
Aspects (整合第三方 AoP 解决方案)
3. 应用层技术
数据访问与数据集成( jdbc,mybatis,redis 等)
声明式事务支持(通过配置、注解加事务)
Web 集成( SpringMVC
Web 实现( websocket 实现等)
4. 测试层
整合 Junit 测试

 2)Spring简介

1.Spring是什么?

Spring 是一个分层的 JavaSE /EE full-stack( 一站式 ) 轻量级开源框架

2.Spring Framework是什么?

Spring 框架中的最基础、最核心模块

3.请说出Spring Frameword2大核心是什么?

     IoCAoP

2.Spring IoC-核心概念

1)Spring解耦(IoC的启蒙思想)

   使用对象时,在程序中不要主动使用new实例化对象,转换为由外部提供对象,这种思想就        是IoC的启蒙。

IoCInversion of Control简称IoC 即“控制反转“;不是什么技术,而是一种解耦设计思想Java开发中,IoC意味着将你应用中的对象实例化、初始化等交给IoC容器控制管理,交给IoC容器管理的对象叫bean

控制有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合。

反转传统应用程序是由程序员在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象

DIDependency Injection,即“依赖注入”,系统运行中,IoC容器根据依赖关系动态的向某个对象提供它所需要的

注意:由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

使用Spring IoC解决如下代码耦合性问题 

public class UserServlet{
    private UserService userService=new UserServiceImpl();
    public void save() {
      userService.save();
   }
}

Spring IoC 需要做如下2件事情:

1.UserServlet,UserServiceImpl程序员不需要new

2.UserServlet中所依赖的UserService,Spring IoC需要给UserService属性赋             值 UserServiceImpl

public class UserServlet{
    private UserService userService;
     public void save() {
     userService.save();
  }
}

思路分析

1.IoC容器实现需要SpringFramework哪些模块

2.IoC容器管理哪些bean

     管理普通bean和工厂bean

3.如何告诉IoC容器哪些bean需要实例化、哪些bean需要依赖? 

4.IoC容器是怎么获取bean的配置信息?

5.如何通过IoC容器获取bean

步骤:

1步:导包 spring-context,可以传递spring-beans,spring-core,spring-expression依赖

2步:创建xml配置文件,通过<bean>实例化UserServlet UserServiceImpl对象  通过<property>注入UserServiceImpl对象

3步:获取Spring IoC容器 ApplicationContext,加载xml配置文件

4步:通过ApplicationContext   getBean(“bean名称,返回类型 )方法获取UserServiceImpl, UserServlet

搭建Spring开发环境--->从SpringIoC容器中获取bean---->依赖注入指定的bean

①:导入Spring坐标

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

<dependency>  
  <groupId>junit</groupId>  
  <artifactId>junit</artifactId>  
  <version>4.13.2</version>
</dependency>

②:定义Spring管理的类(接口)

public class UserServlet {
   private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
   public void save() {
       userService.save();
    }
}
public class UserServiceImplA implements UserService {
    @Override   
 public void save() {
        System.out.println("user service A save....");
    }
}
public class UserServiceImplB implements UserService {
    @Override
  
  public void save() {
      System.out.println("user service B save....");
  }
}

③:创建Spring配置文件,配置对应类作为Spring管理的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">
<!--定义UserServlet bean-->
	<bean id="userServlet" class="com.itheima.web.UserServlet">
 	     <property name="userService" ref="serviceImplB"/>
	</bean>                   
<!--定义Service bean-->	<bean id="serviceImpl" class="com.itheima.service.impl.UserServiceImpl"></bean>	<bean id="serviceImplB" class="com.itheima.service.impl.UserServiceImplB"></bean>
</beans>

④:初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bea

public class App {
@Test
public void testIOC() { 
   ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
   UserServlet userServlet = applicationContext.getBean("userServlet", UserServlet.class);   userServlet.save();}
}
1. 实现 IoC 入门案例实现步骤?

  - 导入依赖:Spring -Context

  - xml配置:<bean> 实例化、 <properties>依赖注入

  - 容器加载:ApplicationContext

3. Spring IoC –bean生命周期

 

 

 bean实例化

 

 

 

1.Spring是如何实例化普通bean和工厂bean

普通bean:构造方法

工厂bean

静态工厂: <bean  class  factory-method />

实例工厂:   <bean  factory-class  factory-method/>

FactoryBean:  <bean class>

 bean的依赖注入

   

bean的依赖注入-setter注入 

bean的依赖注入-setter注入

 

 bean的依赖注入-构造函数注入

 bean的依赖注入-依赖注入方式选择

 依赖注入方式

 bean的依赖注入-自动装配

1. 自动装配: IoC 容器根据 bean 所依赖的资源在容器中自动查找引用类型并注入到 bean 中的过程称为自动装配
2. 自动装配方式:在引用类型中使用
按类型(常用)
按名称(常用)
按构造方法
不启用自动装配

bean中通过autowire属性来声明

Spring 容器中只有一种类型,使用 autowire=“byType” 按照类型可以找到并注入
<bean id="userServlet" class="com.itheima.web.UserServlet" autowire=“byType"/>
Spring 容器中有多种类型,使用 autowire=“byName” 按照 setter 方法名称可以找到并注入 
<bean id="userServlet" class="com.itheima.web.UserServlet" autowire=“byName"/>

bean的依赖注入-自动装配特征 

自动装配用于 引用类型依赖注入 ,不能对数值简单类型进行操作
使用按类型装配时( byType )必须保障容器中相同类型的 bean 唯一,推荐使用
使用按名称装配时( byName )必须保障容器中具有指定名称的 bean ,因变量名与配置耦合,不推荐使用 
自动装配优先级低于 setter 注入与构造器注入,同时出现时自动装配配置失效

  

依赖注入方式 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Last In First Out

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值