Spring的一些总结

一、1.spring依赖库
*SPRING_HOME/dist/spring.jar
*SPRING_HOME/lib/jakarta-commons/commons-logging.jar
*SPRING_HOME/lib/log4j/log4j-1.2.14.jar
2.拷贝spring配置文件到src下(samples\jpetstore\war\WEB-INF\applicationContext.xml留住beans)
3.拷贝log4j配置文件到src下(同上目录)

*加提示:windows-Preferences-MyEclipse-Files and Editors-XML-XML Catalog-add-Key Type选中URI location选 中filesystem,找到dist\resources\spring-beans-2.0.xsd打开,Key Type改成Schema Location,Key后面 加上spring-beans-2.0.xsd

4.在UserManager中提供构造函数或setter方法,spring将实例化好的UserDao实现注入给我们
5.让spring管理我们的对象创建和依赖,必须在spring配置中进行定义
6.编写客户端
spring Ioc容器的关键点:
*必须将被管理的对象定义到spring配置文件中
*必须定义构造函数或setter方法,让spring将对象注入过来


二、1.spring的普通属性注入
参见:spring文档3.3章节

什么是属性编辑器,作用?
*自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器
*如何定义属性编辑器?
*继承PropertyEditorSupport类,覆写setAsText()方法,参见:UtilDatePropertyEditor.java
*将属性编辑器注册到spring中,参见:applicationContext-editor.xml

依赖对象的注入方式,可以采用:
*ref属性
*<ref>标签
*内部<bean>来定义

如何将公共的注入定义描述出来?
*通过<bean>标签定义公共的属性,指定abstract=true
*具有相同属性的类在<bean>标签中指定parent属性

2.spring Bean的作用域:

scope可以取值:
*singleton:每次调用getBean的时候返回相同的实例
*prototype:每次调用getBean的时候返回不同的实例

3.根据名称自动装配
*default-autowire="byName"
根据类型自动装配
*default-autowire="byType"


三、spring对AOP的支持(采用Annotation的方式)

1.spring依赖库
*SPRING_HOME/dist/spring.jar
*SPRING_HOME/lib/jakarta-commons/commons-logging.jar
*SPRING_HOME/lib/log4j/log4j-1.2.14.jar
** SPRING_HOME/lib/aspectj/*.jar
2.采用Aspect定义切面
3.在Aspect定义Pointcut和Advice
4.启用AspectJ对Annotation的支持并且将Aspect类和目标对象配置到Ioc容器中

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

AOP:
*Cross cutting concern(横切性切入点)
*Aspect(切面)
*Advice(切入点的实现)
*Pointcut(应用范围)
*Joinpoint(执行的那个点,spring支持方法)
*Weave(支入,advice应用的过程)
*Target Object(目标对象)
*Proxy(代理)
*Introduction(增加方法)


spring对AOP的支持(采用配置文件的方式)

1.spring依赖库
*SPRING_HOME/dist/spring.jar
*SPRING_HOME/lib/jakarta-commons/commons-logging.jar
*SPRING_HOME/lib/log4j/log4j-1.2.14.jar
** SPRING_HOME/lib/aspectj/*.jar
2.配置如下:
<aop:config>
<aop:aspect id="security" ref="securityHandler">
<aop:pointcut id="allAddMethod" expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/>
<aop:before method="checkSecurity" pointcut-ref="allAddMethod"/>
</aop:aspect>
</aop:config>


spring对AOP的支持

Aspect默认情况下不用实现接口,但对于目标对象(类),在默认情况下必须实现接口,如果没有实现接口必须引入CGLIB库

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


1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2.如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3.如果目标对象没有实现接口,必须采用CGLIB库,spring会自动再JDK动态代理和CGLIB之间转换。


如何强制使用CGLIB实现AOP?
*添加CGLIB库,SPRING_HOME/cglib/*.jar
*在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>


JDK动态代理和CGLIB字节码生成的区别?
*JDK动态代理只能实现了接口的类生成代理,而不能针对类
*CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以该类或方法最好不要声明成final
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值