码迷,mamicode.com
首页 > 编程语言 > 详细

spring学习(一)

时间:2017-04-13 11:41:54      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:学习   pattern   advice   config   过滤   对象   ram   正则   作用   

1.Spring:用来管理对象(创建与销毁),以及对象与对象之间的依赖关系,一般用来集成其它优秀的框架。

2.Spring MVC:控制层的框架,取代struts2。

3.SSH(struts2,spring,hibernate),SSM(spring,spring mvc, mybatis)

4.Spring框架的核心思想:IOC【依赖注入/控制反转,使层与层之间解耦】和AOP【面向切面(方面)的编程,去除冗余代码】

5.Spring几个重要模块
 Core:通过BeanFactory来管理对象,通过IOC依赖注入来管理对象与对象之间的关系。
 Aop:spring面向切面的编程。
 Dao:spring内部提供的持久层技术。
 Spring web Mvc:spring内部提供的控制层技术。
 ORM:spring提供对hibernate,mybatis等orm框架做良好的支持。
------------IOC---------------------------------------
6. bean的创建方式:构造器方式(默认),静态工厂方式,普通工厂方式

7. bean属性的注入方式:构造器注入(默认无参构造器注入)、setter方式注入、Spring组件注入(使用ref)、集合注入

7.1.构造器注入(默认无参构造器注入),可以使用带参构造注入
<bean id ="dog" class="com.chinasofti.vo.Dog">
    <!-- 使用索引 -->
    <!--   
     <constructor-arg index="0" value="点儿点儿"></constructor-arg>
      <constructor-arg index="1" value="2"></constructor-arg>
     -->
     <!-- 使用属性名 -->
     <constructor-arg name="dogName" value="点儿点儿"></constructor-arg>
     <constructor-arg name="dogAge" value="2"></constructor-arg>
   </bean>
7.2.setter方式注入
  <bean id="emp" class="com.chinasofti.vo.Emp">
     <property name="empName" value="张三"></property>
     <property name="age" value="2"></property>
     </bean> -->
7.3.Spring组件注入
     <bean id="book" class="com.chinasofti.vo.Book">
     <property name="bookId" value="1001"></property>
     <property name="bookName" value="Spring"></property>
     </bean>
    
     <bean id="emp" class="com.chinasofti.vo.Emp">
     <property name="empName" value="张三"></property>
     <property name="age" value="2"></property>
     spring组件的注入
     <property name="book" ref="book"></property>
      </bean>
7.4.集合注入
      <bean id="emp" class="com.chinasofti.vo.Emp">
     <property name="empName" value="张三"></property>
     <property name="age" value="2"></property>
     <!-- spring组件的注入 -->
     <!-- <property name="book" ref="book"></property> -->
     <!-- 7.4.1.集合的注入-list -->
     <property name="list">
      <list>
       <value>张三</value>
       <value>李四</value>
       <value>王五</value>
       <!-- <ref bean=""/>
       <null></null> -->
      </list>
     </property>
     <!-- 7.4.2.集合的注入-map -->
     <property name="map">
      <map>
       <entry key="001" value="100"></entry>
       <entry key="002" value="200"></entry>
       <entry key="003" value="300"></entry>
       <!-- <entry key-ref="" value-ref=""></entry> -->
      </map>
     </property>
     <!-- 7.4.3.集合的注入-set -->
     <property name="set">
      <set>
       <value>张三</value>
       <value>李四</value>
       <value>王五</value>
       <!-- <ref bean=""/> -->
      </set>
     </property>
     <!-- 7.4.4集合的注入-properties -->
     <property name="properties">
      <props>
       <prop key="userName">sa01</prop>
       <prop key="userPwd">sa</prop>
      </props>
     </property>
   </bean>
------------AOP---------------------------------------
8.AOP使用到的代理
 8.1CGLIB:定义一个类,子类去实现它,在执行方法之前做一件事,之后做一件事达到增强的效果。
 8.2JDK动态代理:前提条件:提供一个接口。
         配置实现一:bean对象的创建
    <!-- 1.配置前置增强(通知) -->
    <bean id="beforeAdvice" class="com.chinasofti.aop002.BeforeAdvice"></bean>
   
    <!-- 2.配置后置增强(通知) -->
    <bean id="afterAdvice" class="com.chinasofti.aop002.AfterAdvice"></bean>
   
    <!-- 3.目标对象 -->
    <bean id="student" class="com.chinasofti.aop002.Student"></bean>
         配置实现二.1:使用普通的配置:将目标对象与配置实现一进行关联,在此期间需要使用到AOP的org.springframework.aop.framework.ProxyFactoryBean
    <!-- 4.配置代理对象 (简化配置)  p:target-ref:目标对象,p:interfaces:目标对象所对应接口,p:interceptorNames:目标对象用到的增强-->
    <bean id="proxyStudent" class="org.springframework.aop.framework.ProxyFactoryBean"
  p:interfaces="com.chinasofti.aop002.IStudent" p:target-ref="student"
  p:interceptorNames="beforeAdvice,afterAdvice" />
        配置实现二.2:使用正则表达式完成配置: 
  <!-- 把bean对象装入到 loginRegex进行过滤-->
     <bean id="loginRegex" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     <!-- .*匹配除换行符之外的0-N个字符 -->
      <property name="pattern" value="com.chinasofti.aop003.UserDaoImpl.login.*"></property>
      <property name="advice" ref="loginAroundAdvice"></property>
     </bean>   
     <bean id="proxyUserDaoImpl2" class="org.springframework.aop.framework.ProxyFactoryBean"
      p:target-ref="userDaoImpl"
      p:interfaces="com.chinasofti.aop003.IUserDao"
      p:interceptorNames="loginRegex"
     ></bean>
        配置实现二.3:使用aop标签
       <aop:config>
     <!-- aop:pointcut,aop:advisor,aop:aspect -->
      <aop:pointcut expression="execution(* com.chinasofti.aop004.UserDaoImpl.login(..))" id="reg"/>
      <aop:advisor advice-ref="loginAroundAdvice2" pointcut-ref="reg"/>
      <!-- <aop:aspect ref="userDaoImpl2" id="userDaoImpl2Aspect"></aop:aspect>  可以省略可以自动注入-->
     </aop:config> 

9.AOP专业术语名词
 切面(aspect):提取出来的公用模块的公共代码(增强类)。
 通知(advice):切面中具体的执行代码(切面类中的方法)--分为前置、后置、环绕、异常、引介。
 连接点(joinPoint):对应于目标对象的中一个方法。
 切入点(PointCut):通过execution表达式定义的一个连接点。
 目标对象(target):通知起作用的对象(实现类)
 代理对象(proxyFactoryBean):对目标对象起代理作用的。
 
10.配置文件可以有多个可以使用 <import resource="/applicationContext1.xml"/>完成整合。

11.execution(* com.chinasofti.*.*(..) ) :定义的切入点连接点的集合
 第1个 *:不限制方法的返回值类型
 第2个 *:代表com.chinasofti下面所有的类
 第3个 *:代表com.chinasofti下面所有的类的方法
 (..):方法的参数不做任何限制(方法的类型,还是方法的个数)
12.通知
前置通知:MethodBeforeAdvice
后置通知:AfterReturningAdvice
环绕通知:MethodInterceptor 【invoke()】,具有前置通知和后置通知功能,异常通知也可以一起放进来
异常通知:
引介通知:


 

spring学习(一)

标签:学习   pattern   advice   config   过滤   对象   ram   正则   作用   

原文地址:http://www.cnblogs.com/dgq-blog/p/6697521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!