spring 的那些基本要知道的额 01

本次关于Spring 的 浅谈 共分为 4篇 :

======== 欢迎准备入门 spring框架 的 小伙伴 搬好小板凳 ========

我是 来自 西安 的 java 爱好者 小封

spring 的设计的技术的选型 :

Full-stack : 全栈 开发 : 提供了javaEE的三层的 解决方案

表现层 : SpringMVC
服务层 :spring
持久层 :Spring JDBCTemplate  SpringData   

sprig 基于sun的开发的规范 EJB

======== spring 优势 7=========

1: ioc 反向依赖 解耦 简化开发
2: AOP 面向切片的 方法的befor 与after 与环绕 等片段
3: 声明式事务---->AOP

4: 集成
5: Junit 测试
6: 模板 降低使用难度 :
7: java源码的学习

OIC 控制反转 : 把 对象的 创建 叫给Spring 做 控制反转
把 对象的 创建 叫给Spring 做 : 然后逻辑层 里 就会 使用 ====== 解耦 了 /

========= spring体系 =============

体系结构 :2个 核心 IOC 与 AOP 集成
 
底层:Core —IOC
AOP、
DAO ,ROM J,avaEEweb
spJE

========= 07编写jdbc的工程代码用于分析程序的耦合 =============
面向对象 的开闭 原则 : 程序的修改是 关闭的 程序的扩展的开放
需求 : 项目经理 : 要换的 不同的 使用 比如他爱用的是 springTemplate 的 ( 效率低 )
用了 spring 解决的方案的 : 小改 到 xml 配置文件 即可

ioc 是什么 轻量级的框架 的 核心实现 基于 EJB

即可 问问度娘

在这里插入图片描述

自定义IOC 的 模拟 :

反射+ 配置文件 xml 与注解 —— factory工厂(读取 配置: 通过反射 创建对象)
思路 : 解决 业务层 与 持久层 的 耦合
//通过 key 获取全类名
没有明确的 对象 是 :Object
调用配置
4: 在需要实例的地方 使用 工厂创建对象

最后只需要 在配置文件 修改即可
耦合 解除 : 在不修改源码 的
使用 基于反射的factory 工厂创建对象.PNG

在这里插入图片描述

====== spring 的 API :

BeanFactory 的 子接口 ApplicationContext 不一样的是

BeanFactory : 用的时候 在实现 :
ApplicationContext 作为子接口 实现 具体实现的 就会直接创建 的 :

ApplicationContext 的 3个实现类的里 ;
理解 3种实现类 名称

ClassPathApplicationContext :## ====== 类 路径 ClassPath…

跟着服务器 走的 类路径 也就是程序构成 的类文件 走的 ==== 常用 日常开发 最 扩展的 的方式

FileSystemXMLApplicationContext ======= 系统文件本地到xml : FileSystemXml…

本地的 硬盘里的======= 系统 文件的里的xml 的内容来解析的

AnnotationConfigApplicationContext : ======用于注解 的额 下回分晓

注解  的 配置 内容=======  AnnotationConfig......

在这里插入图片描述

====== spring 的getBean( ):重载 方法 里

常用的是 入参的是 字符串 : 通用
还有通过 getClass()来过去 仅有一个的情况下才可以 否则有bug :

在这里插入图片描述

通过 getClass()来过去 仅有一个的情况下才可以 否则有bug :

在这里插入图片描述

========= spring 程序开发的入门流程步骤

在这里插入图片描述

正如上图的 引入 坐标就 已经 集成 所需 的 这些

=============

1:  maven 的导入坐标 : spring5  的版本  :spring -text ---- 这里有一大堆 :aop benas
2: 编写Dao 的接口 (或其实现类 ***** 但是有MyBatis  ====代理就行)
 或者再来一套 :UserTemplate 的实现类 
3: 
    xml 配置文件 : 
  -----bean  id =“方法名”  class =“全类名”   :
4: 测试类 里要进行的是  :
 ClassPathXmlApplicationContext:类路径配置
spring容器 :就是一个Map : 里面 的key 就是 bean 的id: value:是 全类名的 -----对象
spring的对象 就是 Bean
如果项目经理要换做SpringTemplate的 时候你只需改xml 配置文件 的 bean 配置的 class即可
spring 的xml 配置文件 使用 :

主要是id 的唯一的标识 的 就是 不得重复是的 ;
bean : 无参构造
在这里插入图片描述

IOC 中 bean 标签和管理对象细节

bean标签的 作用 : 就是 让Spring IOC 来创建 的

用无参构造方法 :
属性 : id 唯一来确定找到该对象
class : 该累的 字节码 权限定类名
scope : 对象的作用域 :
---- :默认时singleton 单例
---- :prototype : 多例
我们就在java里写的 下面暂时不用
不常用
3个常用域
---- :request
---- :session
---- : global session

在这里插入图片描述

在这里插入图片描述

1 单例与多例:

property : 多例
2个域 : 相当于 调用的

javaGC 机制中 :与单例 与 多例
多例 不受 GC 的影响 多 每次都会创建一个新的 意味者 内存开销
单例 会有GC 的回收 : 因为太少 只有一个 反复使用,节省内存

生命周期的 2个 属性 :
init -Method : 对象创建的 时执行
destroy : 在对象被 销毁之前执行
已经创建 为什么没有销毁 没有来得及 .PNG
要关闭 需要父类转子类

在这里插入图片描述
在这里插入图片描述

实例化 Bean 的三种方式 怎样 造 豆豆

无参构造 与 工厂 ,工厂有静态工厂 与 实现类工厂
常用 1:无参构造 就是基于默认 的

2:****静态方法 :

 <bean id="accountService"  
   class="com.fhw.factory.StaticFactory"     factory-method="createAccountService"></bean> 

3:实现类的方法

  <!-- 此种方式是:    先把工厂的创建交给 spring 来管理。   然后在使用工厂的 bean 来调用里面的方法   factory-bean 属性:
  用于指定实例工厂 bean 的 id。   factory-method 属性:用于指定实例工厂中创建对象的方法。  --> 

 <bean id="instancFactory" class="com.fhw.factory.InstanceFactory"></bean>
   <bean id="accountService"      
   factory-bean="instancFactory"    
   factory-method="createAccountService">
   </bean>  

spring 的依赖注入 DI

1 依赖注入的概念 依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。 那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。 简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

在这里插入图片描述

======== ( 最常用 常用) set 注入 ====================--------

pojo 类中 的 set 方法

<!-- 通过配置文件给 bean 中的属性传值:使用 set 方法的方式  涉及的标签:   property 
 
  属性:    name:找的是类中 set 方法后面的部分    ref:给属性赋值是其他 bean 类型的    value:给属性赋值是基本数据类型和 string 类型的  实际开发中,此种方式用的较多。 -->
   <bean id="accountService" class="com.fhw.service.impl.AccountServiceImpl">   
      <property name="name" value="test"></property> 
      <property name="age" value="21"></property> 
      <property name="birthday" ref="now"></property> 
    </bean> 
<bean id="now" class="java.util.Date"></bean> 
======== set 再有的 另一种 xml中导入 p名称空间,使用 p冒号
不常用 大家 很少这样写

p:成员属性名 来注入数据 ====================--------

配置文件代码: <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:p="http://www.springframework.org/schema/p" 
          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"> 
 <bean id="accountService"  class="com.fhw.service.impl.AccountServiceImpl4"     p:name="test" p:age="21" p:birthday-ref="now"/> </beans>
. =========== 注入集合属性 ==========-----------
不常用 作用得在框架 里

是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。 我们这里介绍注入数组

======== 构造函数注入 (不常用 : 了解)====================--------

以类 为单位 的注入
用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置 的方式,让 spring 框架来为我们注入

在这里插入图片描述

数组  与  各种 集合  都用一遍
public class AccountServiceImpl implements IAccountService {  
  private String[] myStrs;  
  private List<String> myList; 
  private Set<String> mySet;  
  private Map<String,String> myMap;  
  private Properties myProps;   
    public void setMyStrs(String[] myStrs) {   this.myStrs = myStrs;  }  
    public void setMyList(List<String> myList) {   this.myList = myList;  }  
    public void setMySet(Set<String> mySet) {   this.mySet = mySet;  }  
    public void setMyMap(Map<String, String> myMap) {   this.myMap = myMap;  }  
    public void setMyProps(Properties myProps) {   this.myProps = myProps;  } 
 
 @Override  public void saveAccount() {   System.out.println(Arrays.toString(myStrs));   System.out.println(myList);   System.out.println(mySet);   System.out.println(myMap); 

 
 
  System.out.println(myProps);  } }
<!-- 注入集合数据    List 结构的:   array,list,set 
 Map 结构的   map,entry,props,prop 
--> 
<bean id="accountService" class="com.fhw.service.impl.AccountServiceImpl"> 
 <!-- 在注入集合数据时,只要结构相同,标签可以互换 -->  <!-- 给数组注入数据 --> 
  <property name="myStrs"> 
      <set>    
         <value>AAA</value>    
         <value>BBB</value>   
          <value>CCC</value> 
      </set> 
 </property> 
 <!-- 注入 list 集合数据 --> 
  <property name="myList">   
     <array>    
        <value>AAA</value>    
        <value>BBB</value>    
        <value>CCC</value>   
     </array>  
 </property> 
 <!-- 注入 set 集合数据 --> 
  <property name="mySet"> 
      <list>   
            <value>AAA</value>    
            <value>BBB</value>    
            <value>CCC</value>  
     </list>  
 </property> 
 <!-- 注入 Map 数据 --> 
 <property name="myMap">   
    <props> 
        <prop key="testA">aaa</prop>    
        <prop key="testB">bbb</prop>  
    </props> 
 </property> 
 <!-- 注入 properties 数据 --> 
构造函数的方式 ( 不太用的)

在这里插入图片描述

<!-- 使用构造函数的方式,给 service 中的属性传值  要求:   类中需要提供一个对应参数列表的构造函数。  涉及的标签:   constructor-arg    属性:     index:指定参数在构造函数参数列表的索引位置     type:指定参数在构造函数中的数据类型 
    name:指定参数在构造函数中的名称     用这个找给谁赋值      
    =======上面三个都是找给谁赋值,下面两个指的是赋什么值的==============      
    value:它能赋的值是基本数据类型和 String 类型     ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean   --> 
<bean id="accountService" class="com.fhw.service.impl.AccountServiceImpl"> 
         <constructor-arg name="name" value=" 张三 "> </constructor-arg> 
         <constructor-arg name="age" value="18"></constructor-arg> 
         <constructor-arg name="birthday" ref="now"></constructor-arg>
  </bean> 
<bean id="now" class="java.util.Date"></bean> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值