Spring(1)

一、 什么是Spring?

Spring是一个开源框架,Spring是于 2003年兴起的一个轻量级的Java开发框架,为了解决企业级开发的复杂性而创建的。

Spring设计理念 是面向Bean的编程

Spring 有两个核心技术:控制反转(IOC : Inversion of Control)/依赖注入(DI :Dependency Injection) 面向切面编程:(AOP: Aspect Oriented Programming)

  1. Spring的优点:
    低侵入式设计
    独立于个大应用服务器
    依赖注入的特性将组件关系透明化,降低耦合度
    面向切面编程的特性允许将通用的任务进行集中式处理
    能与第三方框架良好的整合
    开源免费容器
    控制反转(IOC DI依赖注入) 、面向页面编程(AOP)
    对事物的支持(声明式事务)
    方便解耦,简化开发(高内聚低耦合)
    2.控制反转(IOC)/依赖注入(DI)
    将组件对象的控制权 从代码本身转移到外部容器组件化的思想:分离关注点,使用接口,不再关注实现
    依赖注入:将组件的构建和使用分开

二、IOC容器:

Spring 容器是Spring的框架核心,容器创建对象,把它们连接在一起,配置他们,管理他们的整个生命周期(从创建到销毁)

Spring容器使用依赖注入(DI)来管理组成一个应用程序的组件这些对象被称为(Spring Beans)

总结:核心容器提供Spring框架的基本功能,核心容器主要组件是BeanFactory,他是工厂模式的实现BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性与实际的应用程序代码分来

控制反转:依赖于容器给予资源,控制权坐落在容器身上,不主动new实例化对象,而需要那个对象,变向容器发请求,让容器帮我们创建一个对象出来。

依赖注入:所需要的对象,需要依赖容器注入本质上IOC和DI是同一思想下的不同维度的表现
代码案例:`

<?xml version="1.0" encoding="UTF-8"?>

<!-- 将Student 类交给Spring管理 (面向Bean编程) -->
<!-- id:不能重名  class: 需要转换的类的路径.类名-->
<bean id="student_a" class="com.xk.pojo.Student" >
    <!-- 使用 set访问器 注入“张三”到 student_a对象中 -->
    <property name="stuName" value="张三"/>
    <property name="sex" value="男"></property>
</bean>

<!--使用 构造函数注入数据 index:构造函数的参数下标  value:设置普通值  ref :另一个bean-->
<bean id="student_b" class="com.xk.pojo.Student">
    <constructor-arg index="0" value="李四"></constructor-arg>
    <constructor-arg index="1" value="女"></constructor-arg>
</bean>


<bean id="entity" class="com.xk.pojo.TestEntity">
    <!-- type: 表示参数的类型 -->
    <property name="specialCharacter1" >
        <value type="java.lang.String"><![CDATA[P&C]]> </value>
    </property>

    <property name="specialCharacter2">
        <value>P&amp;G</value>
    </property>

    <!--注入对象方式一 : 创建对应的Bean 比如student_b-->
    <!--注入对象方式二:内部Bean-->
    <property name="student" >
        <bean class="com.xk.pojo.Student">
            <property name="sex" value="女"></property>
            <property name="stuName" value="Mr. lnner"></property>
        </bean>
    </property>


    <property name="list">
        <list>
            <!-- 定义List中的元素-->
            <value>足球</value>
            <value>篮球</value>
        </list>
    </property>

    <property name="array">
        <list>
            <!-- 定义数组中的元素-->
            <value>足球</value>
            <value>篮球</value>
        </list>
    </property>

    <property name="set">
        <set>
            <!-- 定义SET中的元素-->
            <value>足球</value>
            <value>篮球</value>
        </set>
    </property>
    <property name="map">
       <map>
           <entry>
               <key>
                   <value>football</value>
               </key>
               <value>足球</value>
           </entry>
           <entry>
               <key>
                   <value>basketball</value>
               </key>
               <value>篮球</value>
           </entry>
       </map>
    </property>
    
    <property name="props">
        <props>
            <prop key="football">足球</prop>
            <prop key="basketball">篮球</prop>
        </props>
    </property>
    <!--注入 空 null  "" -->
    <property name="emptyValue">
        <value></value>
    </property>
    <property name="nullValue">
        <null/>
    </property>
</bean>

<!--使用P命名空间注入属性值-->
<!--1、在xml头部  配置 :xmlns:p="http://www.springframework.org/schema/p"-->
<bean id="student_c" class="com.xk.pojo.Student" p:stuName="王五" p:sex="男">

</bean>

<!--注入对象方式三:p命名空间注入-->
<bean id="testEntity" class="com.xk.pojo.TestEntity" p:student-ref="student_c"></bean>

`

作用域描述
singleton在Spring IOC容器仅存在一个Bean实例,Bean以单例方式存在 默认值
prototype每次从容器中调用Bean是,都返回一个新的实例,每次在调用getBean()时,相当于执行了new xxxxBean();
request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session用一个HTTP Session共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境

三、什么是AOP?

AOP(Aspect Oriented Programming) :面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,AOP是OOP(面向对象)的延续,是软件开发中的一个热点,也是Spring框架的一个重要内容,势函数式编程的一种衍生泛型。

利用AOP可以对业务逻辑各个部分进行隔离,从而使的业务逻辑各个部分之间的耦合度降低,提高程序的重用性,同时提高开发效率。

1、AOP采取横向抽取机制,取代了传统的纵向继承体系 重复性代码

2、经典应用:事务管理、性能监视、安全检查、缓存、日志等等…

3、Spring Aop 使用纯Java实现,补充需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类 注入 增强代码

4、AspectJ是一个基于Java语言的AOP框架,Spring 2.0开始 Spring AOP引入对Aspect 的支持,Aspect扩展了Java语言,提供一个专门的编译器,在编译时提供横向代码的织入.

1、目标类(target) , 需要被代理的类 例如 UserService

2、连接点(JoinPoint):是指那些可能被拦截的方法,例如 addUser 。。。。。

3、切入点(PointCut) 已经被增强的连接点 例如:addUser…….

4、通知/增强(advice) :增强代码 前置增强 后置增强 环绕增强 异常增强 最终增强

5、织入(Weaving) 是指把增强 advice 应用到目标对象target来创建新的代理对象Proxy的过程

6、代理类(Proxy)

7、Aspect(切面) 是切入点PointCut和通知advice的结合

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringSpring Cloud是两个相关的框架。Spring是一个开源的Java框架,用于构建Java应用程序。它提供了许多模块和工具,可以帮助开发者更轻松地构建企业级应用程序。Spring Boot是Spring框架的一部分,它是一个快速配置脚手架,可以帮助开发者快速搭建Spring应用程序。Spring Boot可以独立使用,也可以与Spring Cloud一起使用。 Spring Cloud是一个云端分布式架构解决方案,它是基于Spring Boot构建的。它提供了一系列的组件和工具,用于简化开发分布式系统的任务,比如服务发现、服务注册、负载均衡、配置管理等。Spring Cloud依赖于Spring Boot,因此无法独立使用,它扩展了Spring Boot的功能,使开发者可以更方便地构建和管理微服务架构。 总结起来,Spring Boot是一个快速配置脚手架,用于开发单个微服务,而Spring Cloud是基于Spring Boot的云应用开发工具,用于构建和管理分布式系统。Spring Cloud依赖于Spring Boot,因此需要在Spring Boot的基础上进行扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【微服务系列】Spring SpringMVC SpringBoot SpringCloud概念、关系及区别](https://blog.csdn.net/weixin_33700350/article/details/93831564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值