zoukankan      html  css  js  c++  java
  • Spring

    1.优点:

       1:低侵入式设计

       2:独立于各种应用服务器

       3:依赖注入特点,将组件关系透明化

       4:降低了耦合度

       5:面向切面,把一些任务集中式处理

       6:与第三方框架良好的整合

    2.Spring定义:

       轻量级框架当前的主流框架使现有的技术更加易用

    3.Spring的设计模式:

       1.单例模式:创建bean时

       2.简单工厂模式: 在BeanFactory和AppliactionContext中都用到了

       3.代理模式:在Aop中实现jdk动态代理

       4.外观模式:Tomcat中用很多场景都用到了外观模式,因为Tomcat中有很多不同的组件但每个组件需要相互通信,但又不想暴露太多内部信息,所以使用外观模式隔离数据

       5.摸版模式:在各种BeanFactory以及ApplicationContext中也用到了

       6.策略模式:在java中的应用 如comparator这个借口就是为策略模式而生的

       7.原型模式:使用原型模式生成一个对象比用new生成一个对象在性能上有很大的区别,因为Object的Clone()这个方法他直接操作内存中的二进制流,特别是在复制大对象时效果非常明显

       8.迭代器模式:迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部。主要作用就是来遍历集合

     4.IOC容器

      SpringIOC容器依赖于Dom4j,反射,简单工厂模式

      1.使用XML文件向ioc注入bean对象

      xml中:  

        <bean id="ID名" class=“包名.类名”>        <property name="属性名" ref="包名.类名"/ value=“值”></property>----------复杂类用ref简单的类型用value     </bean>

      方法中:
        //创建IOC容器

         名=new ClassPathXmlApplicationContext(注入bean的xml文件.xml);

         //通过容器对象根据bean的id获得bean对象

         类名=名.getBean("ID名");

      2.Bean单实例和多实例:

        默认是单实例对象无论getbean得到的对象都是同一个改成多实例再getbean得到的对象就是新的对象                 

        <bean scope="singleton"></bean>-------单实例对象

        <bean scope="prototype"></bean>-------多实例对象

        IOC容器用的是Context的约束

      3.IOC注入分类:

           1.设值注入(属性注入)     
           <bean id="" class="">
             <property name=""  value=""></property>
           </bean>     
            2.构造注入        
            <bean id="" class="">
              <constructor-arg name="构造参数名" value=“值”>
            </bean> 
              3.坐标注入(坐标从0开始)            
             <bean id="" class="">
             <constructor-arg index="位置信息" value=“值”>
           </bean> 
           4.根据类型注入        
           <bean id="" class="">
             <constructor-arg type="包名.类名" value=“值”>
           </bean> 
          5.设值注入与构造注入的区别:
           1.设值注入:                               2.构造注入:
    
             1.通过set,get访问器实现            1.通过构造方法实现
    
             2.灵活性好,但set,get方法过多         2.灵活性差,仅靠重载限制太多
    
             3.时效性差                     3.时效性好
    
             4.通过无参构造实例化                4.通过匹配的构造方法实例化   
          6.使用P命名空间注入属性值:

            1.引入p的命名空间:xmlns:p="http://www.springframework.org/schema/p"

            2.使用:       

             <bean id="" class="" p:属性名=“值”></bean>
          7.注入不同的数据类型:

           1.注入直接量 :         

              <bean id ="" class="">
                <property name="属性名">
                  <value>值</value>
                </property>
              </bean>

            2.引用bean注入:        

              <bean id ="" class="">
                <property name="属性名">
                  
                  <ref bean="另一个Bean的id"></ref>              或               <ref local="另一个Bean的id"></ref>             </property>            </bean>

          local只能在一个配置文件中检索bean的id而bean标签可以在其他配置文件中检索

          <null></null>表示空值
          <value></value>表示空串
          8.使用内部bean
          <bean id="" class="">
            <property name="">
              <bean class="包名。类名"></bean>
            </property>
          </bean>
           9.注入集合类型的属性        
          <bean id="" class=""> 
            <property name="">
              
              9.1 List             <list>               <value>值</value>             </list>           
              9.2 Set             <set>               <value>值<value>             </set>           9.3 Map             <map>               <entry key="键" value="值"></entry>             </map>           9.4 Props             <props>               <prop key="键">值</prop>             </props>          </porperty>        </bean>

      

      4.IOC容器注解

                    注解与注释的区别   注解是写给程序看的,程序看到会执行。注释是给程序员看的,程序不会执行。

          1.@Component 组件

          2.@Controller 控制器

          3.@Service 服务

          4.@Repository 数据访问

          5.@Autowired 自动装配   要与@Qualifier("name") 注解一起搭配使用

          6.@Resource 自动装配

          @Autowired 与@Resource 的区别:

              @Autowired 会按照类型自动装配如果找不到类型就会自动注入null值  

              @Resource 默认按照类型自动装配如果找不到他会按照名称再次装配一遍

      5.IOC注解扫描

         <context:component-scan base-package="要扫描的包名"></context>

    5.Aop面向切面 

       将复杂的需求分解出不同的方面,将散布在系统的公共功能集中解决,在不改变源代码的情况下增加程序功能

      1.增强处理(Advice)

      2.切入点(Pointcut)

      3.连接点(JoinPoint)

      4.切面(Aspect)

      5.目标对象(Target Object)

      6.Aop代理(Aop Proxy)

      7.织入(weaving)

     

      1.切入点表达式:

      execution(* 空格 包名.类名.方法名(..))

       *代表返回任意值都可以

      (..)括号中的..表示有参数,没有..的话表演没参数

      2.增强操作的执行顺序:

          前置增强→环绕增强→最终增强→异常抛出增强→环绕增强→后置增强

          最终增强不论方法是否报错都会执行

       3.增强使用:

        1.引入约束

        2.把增强类放入Ioc容器

        3.配置Aop

          <aop : config>
                      1.配置切入点
                   <aop : pointcut expression="切入点表达式" id="切入点名">
    
                      2.配置切面 织入增强
                   <aop : aspect ref="增强类Id">
    
                           前置增强    
                        <aop : before method="方法名" pointcat-ref="切入点Id">
    
                           后置增强
                        <aop : after-returning methord="方法名" pointcat-ref="切入点Id" returning="返回的类型的名"/>----返回的类型名必须和方法中返回的类型名一致不然找不到
    
                          异常抛出增强
                        <aop : after-throwing method="方法名" pointcut-ref=“切入点Id” throwing=“抛出的异常名”>
    
                          环绕增强
                        <aop : around method ="方法名" pointcut-ref="切入点Id">
                    
                          最终增强
                        <aop : after method="方法名" pointcut-ref="切入点Id">
           <aop : config>
          
          异常抛出增强方法中          
          public void 方法名(Execption expect){
                 expect.getmessage();
    ------输出错误          
          }

          环绕增强方法中        
          public void 方法名(ProceedingJoinPoint 名){             
                  类型 名
    =名.proceed();-------放行的方法        
          }

      4.Aop注解:

          @Aspect  声明是增强类

          @Pointcut(“切入点表达式”)声明为切入点

        @Before("切入点方法名") 前置增强

           @AfterReturning(“切入点方法名”) 后置增强

        @After("切入点方法名") 最终增强

        @AfterThrowing(value="切入点方法名", throwing="e")异常增强

        @Around(value="切入点方法名")环绕增强

      5.开启Aop 

       <aop : aspectj-autoproxy/>
  • 相关阅读:
    closure
    运算符优先级
    css妙用
    BFC (块级格式化上下文)
    display:table-cell 详解
    line-height深入理解
    margin collapse
    探究 CSS 解析原理
    python入门
    spring与线程安全
  • 原文地址:https://www.cnblogs.com/HQ0422/p/10002279.html
Copyright © 2011-2022 走看看