Spring的一些基础知识

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring的一些基础知识相关的知识,希望对你有一定的参考价值。

1. Spring概述

1.1 Spring介绍

Spring是轻量级开源框架,以IOC(Inverse Of Control 控制反转)AOP(Aspecct Opriented Programming 面向切面编程)为内核,提供了展现层SpringMVC和持久层SpringJDBC以及业务层事务管理等技术。

1.2 Spring的优势

1.2.1 方便解耦,简化开发

1.2.2 AOP编程的支持

1.2.3声明式事务的支持

1.2.4方便程序的测试

1.2.5 方便集成各种优秀框架

1.2.6 降低JavaEE API的使用难度

1.2.7 Spring 的源码是经典的学习范例

2. 程序的耦合和解耦

2.1什么是程序的耦合

耦合:有些类之间不可避免的产生依赖关系,这种依赖关系就叫做耦合。

2.2 工厂模式解耦

在实际开发中,我们把所有的daoserviceaction对象全都使用配置文件配置起来。当启动应用服务器加载的时候,通过读取配置文件,把这些对象创建并存起来。

2.3 两个问题

2.3.1 把创建出来的对象存哪里?

       由于有很多对象,所以要找个集合存起来,有maplist可以选择。当有查找需求的时候我们使用map

       所以在应用加载时,我们创建一个map,用来存daoserviceaction对象,这个map就叫做容器

       

2.3.2 什么是工厂?

       之前,我们获取对象的方式是直接new,是主动的;

       现在,我们获取对象要跟工厂要,工厂为我们查找或者创建,是被动的。这种获取对象的方式就叫做控制反转。

       工厂一边控制资源,一边为我们提供资源。

    控制反转作用:削减计算机程序的耦合。

3. Spring 基于XMLIOC配置

3.1 BeanFactory ApplicationContext的区别

BeanFactorySpring容器中的顶层接口,ApplicationContext是它的子接口。

区别:创建的时间点不一样。

      ApplicationContext:只要一读取配置文件就会创建

      BeanFactory:什么时候使用什么时候创建。

3.2 IOC中的bean标签

3.2.1 作用 :

            用于配置对象让spring来创建的

            默认情况下调用的是类中的无参构造函数,如果没有无参构造函数,则不能创建成功。

 

3.2.2 属性 :

            id: 给对象在容器中提供一个唯一标识,用于获取对象。

            class: 指定类的权限定类名。用于反射创建对象,默认情况下调用无参构造函数。

            scope: 指定对象的作用范围

                  singleton:单例的 默认

                  prototype:多例的

                  requestSpring创建Bean对象,将对象放在request域中。

                  SessionSpring创建Bean对象,将对象放在session域中。

            Init-method: 指定类中初始化方法名称。

            destroy-method: 指定类中的销毁方法名称。

3.2.3 bean的生命周期:

           单例对象:scope=singleton

                     一个应用只有一个对象实例

                     生命周期与容器同步。

           多例对象: scope=prototype

                     每次访问对象时,都会重新创建对象实例

                     生命周期:使用对象时,创建对象实例;长时间不用会被Java垃圾回收器回收。

3.2.4 实例化bean的三种方式:

           第一种:使用默认无参构造函数。

                   <bean id="customerService" class="com.service.impl.CustomerServiceImpl"/>

           第二种:Spring管理静态工厂,使用静态工厂的方法创建对象。

                   <beanid="customerService"class="com.factory.StaticFactory"factory-method="createCustomerService"></bean>

           第三种:Spring 管理实例工厂,使用实例工厂的方法创建对象。

<bean id="instancFactory" class="comfactory.InstanceFactory"></bean>

<beanid="customerService"factory-bean="instancFactory" factory-method="createCustomerService"></bean>

3.3 Spring的依赖注入

3.3.1依赖注入的概念:

                     Spring 框架核心IOC具体实现方式,框架把对象传入,不用自己获取。

 

3.3.2 构造函数注入:

                   就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,

                    spring框架 来为我们注入。              

3.3.3  set方法注入:

                   就是在类中提供需要注入成员的set方法。

3.3.4 使用p名称空间注入数据:

                   此种方式是通过在xml中导入p名称空间,使用p:propertyName来注入数据,它的本质仍然是

                   用类中的set方法实现注入功能。                           

3.3.5 注入集合属性 :

                   就是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。

 

4. Spring基于注解的IOC配置

4.1环境搭建

4.1.1 第一步:拷贝必备jar包到工程的lib目录

4.1.2第二步:在类的根路径下创建一个任意名称xml文件

4.1.3 第三步:使用@component注解配置管理的资源

4.1.4 第四步:在Spring配置文件中开启Spring对注解IOC的支持

4.2 常用注解

4.2.1 用于创建对象的:

                相当于:<bean id="" class="">

 

4.2.1.1 @component

                   作用:把资源让Spring来管理,相当于在xml文件配置一个bean

4.2.1.2 @controler @service @repository

                   @Controller一般用于表现层的注解。

              @Service一般用于业务层的注解。

              @Repository一般用于持久层的注解。

                   

4.2.2 用于注入数据的:

                相当于:<property name="" ref="">    

            <property name="" value="">

4.2.2.1 @autowired

                  作用:

                 自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,

                      使用要注入的对象变量名称作为beanid,在spring容器查找,找到了也可以注入成功。找不到就报错。      

4.2.2.2 @qualifier

                  作用:

                 在自动按照类型注入的基础之上,再按照Beanid注入。它在给字段注入时不能独立使用,必须和@Autowire一起

                      使用;但是给方法参数注入时,可以独立使用。

                  属性:

                  value:指定beanid

4.2.2.3 @resource

                  作用:

                   直接按照Beanid注入。它也只能注入其他bean类型。

                  属性:

                   name:指定beanid

4.2.2.4 @value

                  作用:

                   注入基本数据类型和String类型数据的

                  属性:

                    value:用于指定值

4.2.3 用于改变作用范围的:

                      相当于:<bean id="" class="" scope="">

4.2.3.1 @scope

                 作用:

                 指定bean的作用范围。

                 属性:

                value:指定范围的值。

            取值:singleton  prototype request session globalsession

4.2.4 和生命周期相关的:

                        相当于:<bean id="" class="" init-method="" destroy-method="" />

4.2.4.1 @postConstruct

                  作用:

                       用于指定初始化方法

4.2.4.2 @predestroy

                  作用:

                       用于指定销毁方法

 

5.Spring的纯注解配置

5.1注解说明

5.1.1@configration:

                作用用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用

                       AnnotationApplicationContext(@Configuration注解的类.class)

                属性:

                value:用于指定配置类的字节码

 

5.1.2@componentScan

                  作用:

                  用于指定spring在初始化容器时要扫描的包。作用和在springxml配置文件中的:

                             <context:component-scan base-package="com.cn"/>是一样的。

                  属性:

                   basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。

5.1.3@propertySource

                   作用:

                   用于加载.properties文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文

                       件中,就可以使用此注解指定properties配置文件的位置。

                   属性:

                  value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:

5.1.4: @import

                   作用:

                   用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。

                   属性:

                  value[]:用于指定其他配置类的字节码。

5.1.5@bean

                    作用:

                    该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。它就相当于我们之前在xml配置

                         中介绍的factory-beanfactory-method

                    属性:

                    name:给当前@Bean注解方法创建的对象指定一个名称(beanid)。

5.2 关于Spring注解和xml选择问题:

注解的优势:

配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。

XML的优势:

修改时,不用改源码。不涉及重新编译和部署。



.........待续


本文出自 “亦轻尘的小博客” 博客,请务必保留此出处http://15201565095.blog.51cto.com/12905158/1953378

以上是关于Spring的一些基础知识的主要内容,如果未能解决你的问题,请参考以下文章

spring一些基础知识

spring基础知识——aop

spring boot学习总结-- 关于@SpringBootApplication的一些基础知识点

Spring Boot一些基础配置

Spring的一些零碎知识点整理

[Spring框架]Spring 事务管理基础入门总结.