Spring总结

 

Spring 总结

配置文件

Ø         Sping 依赖库

l       SPRING_HOME/dist/spring.jar

l       SPRING_HOME/lib/Jakarta-commons/commons-logging.jar

l       SPRING-HOME/lib/log4j/log4j.jar

l       SPRING-HOME/lib/aspectj.jar

Ø         拷贝spring配置文件到src下

Ø         拷贝log4j配置文件到src下

Ø         在UserManager中提供构造函数或setter方法,spring 将实例化好的UserDao实现注入给我们

Ø         让spring管理我们的对象创建和依赖,必须在spring文件中进行定义。

Ø         编写客户端:spring IOC容器的关键点:

l       必须将被管理的对象定义到spring 配置文件中

l       必须定义构造函数或setter方法,让spring将对象注入过来

属性编辑器及一些用法

Ø         作用:自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入spring已经有内置的属性编辑器,我们可以根据自己的需求自己定义属性编辑器。

Ø         定义:继承PropertyEditorSupport类,覆写setAsText()方法。将属性编辑器注册到spring中。

<!-- 定义属性编辑器 -->

 <bean id="customEditorConfig" class="org.springframework.beans.factory.config.CustomEditorConfigurer">

 <property name="customEditors">

    <map>

       <entry key="java.util.Date">       <bean class="com.xasxt.editor.DatePropertyEditor">

           <property name="pattern" value="yyyy-MM-dd"></property>

        </bean>

        </entry>

    <entry key="com.xasxt.Address">

    <bean class="com.xasxt.editor.AddressProperty"></bean>

    </entry>

    </map>

</property>

 </bean>

Ø         依赖属性的注入

l       Ref属性

l       <ref/>标签

l       内部<bean>来定义

Ø         如何将公共的属性描述出来?

l       通过<bean>标签定义公共的属性,指定abstract=true

l       具有相同的属性的类在<bean>标签中指定其parent

l       <bean id="prop" abstract="true">

l            <property name="name" value="zhangsan"></property>

l           <property name="address" value="xi&quot;an"></property>

l         </bean>

l       <!-- 一下配置中parent="prop"引用上面的抽象bean -->

l       <bean id="stu" class="com.xasxt.Student" parent="prop"> <property name="name" value="lisi"></property>

l       <property name="code" value="1001"></property>

l        </bean>

Ø         Spring Bean的作用域

l       Scope的取值:

1,  singleton:每次调用getBean的时候返回相同的实例

2,  prototype:每次调用getBean的时候返回不同的实例

 

u       采用Annotation方式实现AOP

l       定义Pointcut,Pointcut的名称就是allAddMethod,此方法不能有返回值和参数,该方法只是一个标识

l       Pointcut的内容是一个表达式,描述那些对象的哪些方法

l       采用Aspect定义切面

l       在Aspect定义Pointcut和Advice

l       启用AspectJ对Annotation的支持并且将Aspect类和目标对象配置到IOC容器中,

注意:在这种方法定义中,切入点的方法是不被执行的,它存在的目的仅仅是为了重用切入点即Advice中通过方法名引用这个切入点。

u       AOP

l       Cross cutting concern

l       Aspect

l       Advice

l       Pointcut

l       Joinpoint

l       Weave

l       Target Object

l       Proxy

l       Introduction

 

u       采用Annotation方式实现AOP(采用静态配置方式)

<aop:config>

   

        <aop:aspect id="bfs" ref="bf">

           <aop:pointcut expression="execution(* say*(..))" id="pc"/>

           <aop:before method="beforeAdvice" pointcut-ref="pc"/>

           <aop:after method="afterAdvice" pointcut-ref="pc"/>

           <aop:around method="aroundAdvice" pointcut-ref="pc"/>

        </aop:aspect>

     </aop:config>

 

u       Spring对AOP的支持

l       Aspect默认情况下不用实现接口,但对于目标对象(UserManagerImpl.java),在默认情况下必须实现接口,如果没有接口必须引入CGLIB库,spring会自动在JDK动态代理和CGLIB之间进行转换。

l       我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得参数值,方法名等等。

l       如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP

l       如果目标对象实现了接口,可以强制使用cglib实现AOP

l       如何强制使用cglib实现AOP

         添加cglib库,SPRING_HOME/cglib/*.jar

         在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

   JDK动态代理和cglib字节码生成的区别?

         JDK动态代理只能对实现了接口的类生成代理,而不能针对类

         Cglib是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,因为继承,所以该类或方法最好不要声明成final

 

u       编程式事务

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值