注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韬光养晦

路漫漫其修远兮,吾将上下而求索

 
 
 

日志

 
 

Spring two  

2008-06-06 13:42:41|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

以下资料来源于北京尚学堂。未经详细整理。


  • 加入spring的依赖库:
     *SPRING_HOME/dist/spring.jar
     *SPRING_HOME/lib/jakatra-commons/commons-logging.jar
     *SPRING_HOME/lib/log4j/log4j-1.2.14.jar
     也可以将这些包弄成一个用户库spring.
     *将applicationContext.xml、log4j.properities、
      放入到src下.
  • 当编写xml文件时输入<没有提示的解决方法:
      window->preference->MyEclipse->editorsXML->XML Catalog->User Specified Entrime->Add->:
    URI:选择SPRING_HOME/dist/resources/spring-beans-2.0.xsd
    KEY:http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    然后重新打开要编写的XML文件 即可。
  •  *在需要其他对象的地方,定义setter方法,如UserManagerImpl类中
     *让spring管理这些对象的创建,让spring管理对象之间的依赖,即定义spring配置文件。
     *在客户端,通过BeanFactory接口来访问那些被spring管理的对象。
     *注意,最好转换为对应的接口。如:
     //读取spring配置文件
     BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
     //获取userManager对象
     UserManager userManager=(UserManager)factory.getBean("userManager");
  • spring的关键点:
     *让spring管理你的对象
     *定义setter方法或创建构造函数(配置文件中的配置方法也不同property或者constructor-arg)
     <bean id="userManager" class="com.lanvis.spring.manager.UserManagerImpl">
      <!-- setter方法注入
      <property name="userDao" ref="userDaoOracleImpl" />
       -->
       <!-- 构造函数注入 -->
       <constructor-arg ref="userDaoDB2Impl"/>
     </bean>
  • spring普通属性的注入:
     <bean id="bean1" class="com.lanvis.spring.beans.Bean1" >
      <property name="strValue" value="hello" />
      <property name="intValue" value="123" />
      <property name="listValue" >
       <list>
        <value>list1</value>
        <value>list2</value>
       </list>
      </property>
      <property name="setValue">
       <set>
        <value>set1</value>
        <value>set2</value>
       </set>
      </property>
      <property name="arrayValues" >
       <list>
        <value>array1</value>
        <value>array2</value>
       </list>
      </property>
      <property name="mapValues" >
       <map>
        <entry key="key1" value="value1" />
        <entry key="key2" value="value2" />
       </map>
      </property>
     </bean>
      应用时候只要:Bean1 bean=(Bean1)factory.getBean("bean1");
  • 属性编辑器,继承PropertyEditorSupport类,复写其中的setAsText(String text)方法,然后在配置文件中将自己写的编辑器类注入到spring那个对象的对应属性中。其目的在于将spring配置文件中定义的字符串转换为相应的对象进行注入。spring已经内置了很多类型的属性编辑器,也可以自定义编辑器。
  • 还可以在<property />中利用parent=""来指定要继承的bean.
  • spring的bean有两种作用域:singleton和prototype。用法:
     <bean name="" class="" scope="singleton" />
     前者只有一个bean,放入缓存每次调用的时候都返回同一个bean;后者每次调用getBean()都会新生成一个bean.
  • spring的bean还可以启动autoware,采取不同的策略(根据名称、类型等等)将bean同要注入的属性或者对象对应。启用方法<beans ````````  default-autoware="指定的策略">
  • 实现aop的两种方法 aspectj 和 spring内置支持。aop可以在程序执行特定的方法的时候适当加上其他的方法。例如在执行所有以add开头的方法之前执行一个check方法。人们倾向于使用aspectj,因为它的配置和代码写在一起,没有丢失配置文件的危险。两种方法的实现代码和配置如下:
    •  *aspectj:    在<beans>中添加<aop:aspectj-autoproxy/>
            在编写代码时举例如下:
            @Aspect
      public class MySecurityManagerImpl implements MySecurityManager {
    •  /**
        * 定义一个切入点,切入点的名称:allAddMethod(该方法的返回值需要是void,该
        * 方法只是一个标识),切入点的内容是一个表达式,以描述需要横切那些对象的那些方法
        * 的调用
        *
        * 具体表达是式的用法,参考spring文档6.2.3.4章节
        */
       @Pointcut("execution(* add*(..)) || execution(* del*(..)) || execution(* modify*(..))")
       private void allAddMethod() {}
       
       /**
        * 定一个advice,标识在那些切入点的何处插入本方法
        */
       @Before("allAddMethod()")
       public void checkSecurity() {
        //...
        //...
        System.out.println("进行安全检查!!");
       }
      }
    •  *apring内置支持: 在<beans>中添加 
       <aop:config>
        <aop:pointcut id="allAddMethod" expression="execution(* add*(..))"/>
        <aop:aspect id="securityAspect" ref="mySecurityManager">
         <aop:before pointcut-ref="allAddMethod" method="checkSecurity"/>
        </aop:aspect>  
       </aop:config>
  • spring中连接点 JoinPoint的用法:使用一个JoinPoint对象作为前加方法的参数(举例来说,就是上面中的checkSecurity方法的参数),在checkPoint方法中可以使用JoinPoint的各种方法来获取有关被作用方法(举例来说,就是allAddMethod方法)的参数等等信息,并进行相应处理。
  • 切面类(上述中的MySecurityManagerImpl)可以不必实现一个接口,但是代理类(上述中的UserManagerImpl类)必须实现一个接口。
     *如果目标类实现了接口,默认采用JDK动态代理来实现AOP
     *如果目标类没有实现接口,必须添加CGLIB支持,spring会自动在JDK河CGLIB代理之间进行切换。
     *如果目标类实现了接口,也可以定义rangspring强制使用CGLIB
     *如何强制使用CGLIB代理实现AOP:
      在<aop:config>定义为<aop:config proxy-target-lass="true">,并且要引入CGLIB包SPRING_HOME\lib\cglib\*.jar

代理模式示意:


随后讲述了spring中对于事务的处理机制。

  评论这张
 
阅读(237)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018