Spring笔记

Posted

tags:

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

Spring核心知识点:

一、Spring简介

1.Spring是一个轻量级框架,不依赖于任何容器

2。Spring是一个容器,包含很多技术在内的大杂烩

3。Spring核心思想IOC和AOP.

4.Spring可以非常容易地与其他框架整合

 

二、搭建Spring的步骤

1.引入jar包(导入给的必须的jar包下的所有文件)

2.添加spring的配置文件

3.在main方法中获取spring的xml文件方法:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

 

三、Spring的IOC思想

1.使用Spring的xml文件管理bean的生命周期和依赖关系

具体配置说明:

1)(常见)创建对象的方式之一:使用构造方法创建

bean:基本对象

        id:唯一进行区分的标识

        class:权限命名(完整的包名+类名)

        name:为bean起的别名

        如果不使用构造方法,则默认调用空的构造方法

2)创建对象的方式之二:使用工厂创建

1.静态工厂:class="生产对象的工厂的class名称"

              

     factory-method:生产对象使用的方法的名称

2.非静态工厂:不配置class

    factory-bean:生产对象的工厂(spring管理的其他bean的引用)

    factory-method:

3)配置属性的方式之一:使用property标签注入

     

    a)普通属性

    <property name="name" value="小明"></property>

        <!-- ref:参照的对象名

            管理的bean的id

         -->

    b)单个引用类型数据

        <property name="book" ref="mybook"></property>

     c)属性是数组类型的

        <property name="favs">

            <array>

               <value>编程</value>

               <value>跳舞</value>

               <value>唱歌</value>

               <value>书法</value>

            </array>

        </property>  

       

        d) 注入list集合

        <property name="names">

            <list>

                <value>小王</value>

               <value>王二小</value>

               <value>小二</value>

            </list>

        </property>

       

        e) map集合注入

        <property name="map">

            <map>

               <entry key="1" value="第一个"></entry>

               <entry key="2" value="第二个"></entry>

               <entry key="3" value="第三个"></entry>

            </map>

        </property>

 

        f)Properties属性注入

        <property name="propertis">

            <props>

               <prop key="a">abstract</prop>

               <prop key="b">buy</prop>

               <prop key="c">cute</prop>

            </props>

        </property>

4)配置属性的方式之二:使用constractor-args标签注入

 

    index:参数的索引位置,从0开始

     name:参数的名称

     type:参数的数据类型

 

    value:注入的值

<constructor-arg value="110" />

<constructor-arg value="lili"/>

 

5)对IOC的理解:

传统模式:对象的创建和依赖关系的维护都散落在业务逻辑中,不方便管理

Spring:对象的创建和依赖关系的维护都交由Spring管理,方便维护,更有利于解耦。

这种形式的转变,可以称为是控制的反转,即IOC(Inversion of Control),也可以成为Dependency Inversion(依赖的反转)

 

6)bean 的生命周期的管理

scope:控制bean的生命周期

取值:singleton:默认:单例的对象

    prototype:多例

    request/session/application...在web开发中使用

 

四、Spring的AOP思想

1.静态代理模式

要求:

   代理对象:代理target执行功能的对象

   被代理对象:target

 

   两者同时实现同一个接口

2.动态代理模式:可以动态生成代理对象,并实现代理任何类的任何方法

3.JDK自带的动态代理:要求被代理的对象必须实现接口

使用步骤:

         1)编写类Implements InvocationHandler接口

         2)重写invoke()方法:

    invoke():是底层自动调用,功能:代理调用target的method方法,在前后可以织入其他逻辑

     *

     * Object proxy:代理对象。需要写方法产生

     *

     *  Method method:target的想要被调用的方法对象

     * 

     *   Object[] args:该方法中的参数

    3)在该类中封装被代理对象

       private Object target;//在代理类中封装一个被代理的对象

         4)编写方法产生动态代理对象

         public Object createProxy(Object target)

    {

       this.target = target;

      

       //产生代理对象]

       /**

        * 第一个参数:ClassLoader:被代理对象的类的加载器

        * 第二个参数:被代理对象实现的所有接口

        * 第三个参数:handle

        */

       return     Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);

    }

         5)调用方式:

                   JDKDynamicProxyHandler handler = (JDKDynamicProxyHandler)ctx.getBean("jdkdp");

      

       IUser proxy = (IUser)handler.createProxy(user);

       proxy.study();

4.Spring中的Advice

根据执行的时机不同分为

前置消息:implements MethodBeforeAdvice

后置消息: implements AfterReturningAdvice接口

环绕消息: implements MethodInteceptor 接口

 

使用步骤:1.创建类并实现合适的接口

         2.在xml中配置

<aop:config>

    配置切入点 :在哪些类的哪些方法上织入advice

        expression="execution()"   *通配符

                                 ..在参数部分通配

                                

        第一个*,匹配返回值位置

   

    <aop:pointcut expression="execution(* com.web.service.*.*(..))" id="logCut"/>

    织入消息:

        配置的先后基本可以决定执行的先后

   

    <aop:advisor advice-ref="before" pointcut-ref="logCut"/>

    <aop:advisor advice-ref="after" pointcut-ref="logCut"/>

    <aop:advisor advice-ref="around" pointcut-ref="logCut"/>

 </aop:config>

 

5.自定义Advice的实现

6.AOP核心思想

 

 

 

 

五、注解方式

1.注解和xml的区别:

各自特点:注解—开发效率高,简洁,与源码耦合

                     Xml ----传统,复杂,功能更强大些,与源码不耦合

 

2.Spring提供的注解

需要在xml中加入:<context:component-scan base-package="com.web"/>

1)@Component   统一的标识,标识该类是由spring来管理的一个组件

 

2)@Controller  管理Model层的组件

 

3) @Service 管理service层的

 

4)@Repository 管理持久层的组件

 

 

5)维护依赖关系

@Resource

默认情况,使用名称注入参数(byName),如果不指定名称,则会根据反射自动找数据类型(byType)

 

需要在@Resource 和其他组件的注解上配合使用

 

 

 

@AutoWired  自动装配

优先使用byType注入

如果想使用byName方式注入,则需要配合@Qulifier注解

 

@Qulifier使用在属性上,set方法入参中,构造方法入参中

 

 

AOP中的注解:

@Aspect:AOP中使用的注解,标记该类是一个切面

 

@Pointcut("execution(* com.web.service.*.*(..))"):设置切入点

 

一般情况下,如果多个方法共用一个切入点,则可以先定义一个方法,在方法上使用该注解,则后续的方法的注解中使用该方法名称作为切入点的引用。

 

@Before("pointcut()"):在核心业务逻辑之前执行

要求注解中必须添加切入点

 

@After("pointcut()"):在核心业务逻辑之后执行

 

@Around("pointcut()"):环绕型Advice

 

@AfterReturning("pointcut()"):程序正常退出时调用的advice

注解中可使用的参数:pointcut—指定切入点

              returning—接收返回值      

以上是关于Spring笔记的主要内容,如果未能解决你的问题,请参考以下文章

spring学习笔记 Spring概述

Spring笔记

Spring In Action 4 学习笔记Spring概览

Spring学习笔记

Spring 学习笔记

Spring学习笔记IOC容器及Spring配置详解