Java——Spring基础

Spring

  • 分层:

    • web层: struts,springmvc

    • service层:spring

    • dao层:hibernate,mybatis,jdbcTemplate,spring-data

      <!--more-->

1.什么是Spring

  • spring是一个基于IOC和APO的结构的J2EE系统的轻量级框架,Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情 ,它的核心主要是ioc和aop。

  • IOC(Inversion Of Control)反转控制是spring的基础,简单地说就是创造对象由以前的程序员自己new构造方法来调用,变成了交由spring创建对象。

  • DI依赖注入(Dependency Inject),简单地说就是拿到对象的属性,已经被注入好相关值了,直接使用即可。

  •  

2.IOC思想:

      其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为应答,容器适时的返回资源,而应用了IOC后,**则是容器主动的将资源推送给它所在的管理组件,组件所要做的仅是选择一种合适的方式来接受资源**,这种行为也被称为查找的被动形式。
  • IOC(Inversion Of Control)反转控制是spring的基础,简单地说就是创造对象由以前的程序员自己new构造方法来调用,变成了交由spring创建对象。

  • Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:

    谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

      ●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

  • AOP(Aspect Oriented Programming )面向切面,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果 ,通俗点讲就是提供一个为一个业务实现提供切面注入的机制,通过这种方式,在业务运行中将定义好的切面通过切入点绑定到业务中,以实现将一些特殊的逻辑绑定到此业务中 。

    • 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能

    • 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务

    • 所谓的周边功能,比如性能统计,日志,事务管理等等

    • 周边功能在Spring的面向切面编程AOP思想里,即被定义为切面

    • 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP

  • 核心容器:bean,core,context,expression

3.Spring的优点

  • 方便解耦,简化开发(高内聚低耦合)

    Spring就是一个大工厂(容器),可以将所有的对象创建和依赖关系维护,交给Spring管理  spring工厂是用于生成bean

  • AOP编程的支持

    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

  • 声明式事务的支持

    只需要通过配置就可以完成对事务的管理,而无需手动编程

  • 方便程序的测试

    Spring对Junit4支持,可以通过注解方便的测试Spring程序

  • 方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

  • 降低JavaEE API的使用难度

    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

4.Spring的3种配置方式

  1. 基于XML的配置

  2. 基于注解的配置

  3. 基于Java的配置

2.配置Bean

  1. 配置形式:基于XML文件的方式,基于注解的方式

  2. Bean的配置方式:通过反射,通过工厂方法,FactoryBean

  3. IOC容器

1.Spring容器

  • 在SpringIOC容器读取Bean配置创建Bean实例之前必须对他进行实例化,只有容器实例化后,才可以从IOC容器里获取Bean实例并使用。

  • Spring提供两种类型的IOC容器实现

    • BeanFactory:IOC容器的基本实现

    • ApplicationContext:提供更多高级的特性,是BeanFactory的子接口

    • BeanFactory是Spring框架的基础设施,面向spring本身,ApplicationContext面向Spring框架的开发者,几乎所有的应用场合直接都用ApplicationContext而非BeanFactory。

    • 无论什么方式,配置文件相同

    //1.创建Spring的IOC容器对象
    //ApplicationContext 代表容器
    //ClassPathXmlApplicationContext 是 ApplicationContext 接口的实现类:从类路径加载配置文件
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    ​
    //2.从IOC容器中获取bean实例
    //利用id定位到IOC容器中的Bean
    HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloworld");

2.依赖注入的方式

1,setter注入

  • 属性注入即通过setter方法注入Bean的属性值或依赖的对象

  • 属性注入使用property元素,使用name属性指定Bean的属性名称,value属性指定属性值

  • 属性注入是最常用的注入方式

    <bean id="helloworld" class="com.HelloWorld">
        <property name="name2" value="Spring"></property>
    </bean>

2,构造器注入

  • 通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用。

  • 构造器注入<construct-arg>元素声明属性

3,工厂方法注入

4,Bean之间的引用

  • 在Bean配置文件中,通过< ref >元素或ref属性为Bean的属性指定对Bean的引用

  • 内部Bean

    • 在Bean引用时在自己内部构建一个Bean

    • 不能被外部Bean引用

  • 级联属性赋值:

  • 集合属性配置(list和map集合和Properties)

  • 使用Utility scheme 定义集合(外部bean可用)

  • 通过p 命名空间为Bean的属性赋值

3.自动装配

1.XML配置的Bean自动装配

  • Spring IOC容器可以自动装配Bean,需要做的就是仅仅在<bean>的autowire属性里指定自动装配的模式

  • byType(根据类型自动装配):若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判哪个合适,所以不能自动装配。

  • byName(根据名称自动装配):必须将目标Bean的名称和属性名设置完全相同

  • <!--自动匹配装配autowire-->
    <bean id="person" class="out.Person"
    p:name="小哥" autowire="byType">

2.继承Bean配置

  • 子Bean可以覆盖从父Bean继承过来的配置

  • 并不是《bean》元素里的所有属性都会被继承

  • 3.Bean之间的依赖

4.Bean的作用域

  • 定义一个作用域

    • 当定义一个<bean> 在Spring里,我们还能给这个bean声明一个作用域。它可以通过bean 定义中的scope属性来定义。如,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope 属性 必须设为 singleton。

  • Spring支持的几种bean的作用域

    • singleton : bean在每个Spring ioc 容器中只有一个实例

    • prototype:一个bean的定义可以有多个实例

    • request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

    • session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    • global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效

5.Bean的生命周期

Spring Bean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。

Spring bean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成

  1. 初始化之后调用的回调方法。

  2. 销毁之前调用的回调方法。

 

  • Spring容器 从XML 文件中读取bean的定义,并实例化bean。

  • Spring根据bean的定义填充所有的属性。

  • 调用Bean的初始化方法。

  • bean就可以使用了

  • 当容器关闭时,调用Bean的销毁方法

  • 在Bean的声明里设置init-method和destroy-method属性,为Bean指定初始化和销毁方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值