spring冷知识

一. bean标签下注入:  

    1.构造器注入 <construction-arg index="要注入的第一个属性",type="java.langString " value="">

    2.set方法注入 <property name="" value="">

    3.构造标签和property标签的:  ref属性的值为另一个bean对象.bean对象必须先声明,完成引用类型的注入.

    4 .<bean>.标签下集合属性注入: 专门的标签来注入

       1. list集合或数组 <property name="list"> <list> <value>sfda

       2. set集合: <property name="set"> <set> <value>sfda

       3. map集合: <property name="map"> <map><entry key=""或key-ref value=""或value-ref>

       4. properties :  <property name="map"> <props><prop key="">值


二. spring2.0后   名称空间p和c的使用: 他们是虚拟的, 嵌入在spring内核中的,

    1.使用 p 名称空间可以解决我们setter注入时 <property> 简化

        前提: 把xmls:p = .....schema/p

        使用: 在 bean 标签内: p:成员属性名="值"
 
   2.  使用 c 名称空间可以解决我们构造器注入时<constructor-arg>简化  

        前提: 把xmls:c = .....schema/c

        使用: 在 bean 标签内: c:成员属性名="值" 或c:成员属性-ref

 3. spring 中 spel表达式;  类似与 ognl 或 el表达式 完成对象属性存储以及方法调用  spring3.0提供的.

    原来: ref 快 , 用 value="#{dog.age或getage()+10}"   (很少使用)

 

三 . name和id:  name; 不同包含特殊符合,为了更好的扩展    id: 遵守xml规范,名称内不能包含特殊符合


四 . aspectj 切点 传统开发,  可以使用<aop:xxx> 来简化操作.

      1. aspectj 框架实现 aop   aspect: 切面=切点+通知(多个切点和多个通知的组合) aspectj: 第三方框架,可以使用部分语法

       定义通知类型6种, 前置,后置,环绕,抛出,引介,最终通知(不过是否有异常,都会执行.)


 .  2. 在 aspectj 中它的增强可以不实现任何接口,只需要定义出增强功能

       xml文件中: <aop:config> <aop:aspect ref="通知"> <aop:before method="">

              <aop:after-throwing method="afterThrowing" pointcut-ref="delPointCut" throwing="ex"/>


  3. 环绕通知方法  public object around(proceedingjoinpoint pjp){ pjp.proceed();  }

       异常抛出通知 public void afterThrowing(JoinPoint jp,Throwable ex) {
           System.out.println("发现了异常。。。。"+ex)

  4.  关于各个通知的参数

     前置通知:参数 joinpoint jp,  jp.getSignature().getDeclaringTypeName() 获取目标类名

     后置通知: 参数 joinpoint jp, object val  要在xml中配置 returning="val" 注意参数名要一致

     环绕通知 : 参数 proceedingjoinpoint pjp,     Object obj = pjp.proceed() 执行目标行为

     异常抛出通知:  参数 JoinPoint jp ,Throwable ex  在xml中 throwing="ex"

     最终通知:  after(JoinPoint jp )  jp.getSignature().getName()  方法名;



五. 关于代理方式的选择: 在xml中 <aop:cofig proxy-target-class的值默认为false,代表有接口使用proxy >


六 : 注解开发:  <context:component-scan base-pakeage> 扫描指定包下的注解;

      开启aspectj注解自动代理功能: <aop:aspectj-autoproxy/>

     创建无参数方法: 在参数上面: @pointcut("execution(* *.update(..)")


七:. spring 在web开发中的应用.

   1.导入一个jar包

   2.在web.xml 配置<listener-class> org........web.contextloaderlistener

    contextloaderlistener他实现了servletcontextlistener,他是监听整个容器操作的

     在这个listener中,当我们服务器启动时, contextloaderlistener他帮我们创建了servletcontext对象
     
     而将applicationcontext对象的一个实现类webapplicationcontext存入到了servletcontext中.

   
    servletcontext.get

  3.我们还需要在web.xml文件中配置 applicationcontext.xml文件,  默认情况下会在web-inf目录下查找

    全局变量: <context-param> <param-name> contextconfiglocation</param-name>
                    <param_value> classpath:applicaitoncontext.xml

   就是在src下查找配置文件


 

猜你喜欢

转载自blog.csdn.net/xc123_java/article/details/74091881