spring框架学习笔记全Word文档下载推荐.docx

上传人:b****6 文档编号:17910239 上传时间:2022-12-12 格式:DOCX 页数:7 大小:19.49KB
下载 相关 举报
spring框架学习笔记全Word文档下载推荐.docx_第1页
第1页 / 共7页
spring框架学习笔记全Word文档下载推荐.docx_第2页
第2页 / 共7页
spring框架学习笔记全Word文档下载推荐.docx_第3页
第3页 / 共7页
spring框架学习笔记全Word文档下载推荐.docx_第4页
第4页 / 共7页
spring框架学习笔记全Word文档下载推荐.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

spring框架学习笔记全Word文档下载推荐.docx

《spring框架学习笔记全Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《spring框架学习笔记全Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。

spring框架学习笔记全Word文档下载推荐.docx

通过这两个代号,我们之后就能取出这个两个类的实例,并进行使用。

(相应的类要Hello,Bye事先自己定义好)

3、使用ClassPathXmlApplicationContext来加载上一步中的xml文件,以及获取其中的某个bean

ApplicationContextctx=newClassPathXmlApplicationContext("

applicationContext.xml"

);

加载xml文件中的配置信息,两个类就被spring管理起来了Helloh=(Hello)ctx.getBean("

注意:

取出bean时可以用多态

4.开闭原则:

对扩展开放,对修改关闭

需求变更时,尽量扩展一个类,不要去修改原来的类;

这样可以避免在原来正确的类上产生新的bug。

5.spring不但可以动态创建类的实例,也可以通过配置文件动态初始化实例的属性值

1、私有属性要有对应的setter方法

2、在bean中定义property属性,对应类中私有属性,*可以通过配置进行属性的自动设置。

cat"

com.oracleoaec.prop.Cat"

在猫的bean中注册name属性,值为TOM

<

property

name="

name"

value="

Tom"

/property>

注册age属性,值为10,Tom和10两个值会自动注入到猫的实例中去

propertyname="

age"

11"

*也可以通过构造方法来进行动态初始化

1、在类中定义需要自动调用的构造方法

2、在配置文件的bean中定义<

contructor-arg>

来使用构造方法进行属性值的初始化

pig"

com.oracleoaec.prop.Pig"

!

--通过Pig的构造方法进行初始化,name是构造方法形参名,p是传入构造方法的实参-->

constructor-argname="

p"

/constructor-arg>

--age是构造方法形参名,10是传入构造方法的实参-->

10"

 

*可以和xxx.properties格式的配置文件结合使用

1、先要在配置文件中注册,载入一个xxx.properties文件的信息

beanclass="

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"

locations"

classpath:

xxx.properties"

/>

2、可以在其他的bean中使用这个xxx.properties中定义的信息,比如:

bean.....>

xx"

${zzz}"

这种spring的xml配置文件读取传统的xxx.properties配置文件的方式,将在以后数据源配置中经常使用,jdbc.properties中全是数据源配置参数,而spring的上下读取这个jdbc.properties,然后将其中的参数值,在bean中使用。

这样两者各司其职,jdbc.properties负责jdbc的数据信息,spring的xml文件负责处理bean的注册及bean之间的关系。

5.spring管理的类,属性的类型完全可以是自定义类型。

这种情况下就设计到类和类之间的装配。

如果是自定义类型的装配,那么property标签不再用value了,而用ref,比如:

computer"

....Computer"

keyboard"

ref="

....Keyboard"

classKeyboard{

}

classComputer{

privateKeyboardkeyboard;

//setter......

*自动装配:

这个autowire=bytype表示会自动扫描上下文中的类,如果有符合Tool这个类型的就自动装配

如果一个都不符合或有多个符合就会报异常

human"

com.oracleoaec.autowired.Human"

autowire="

byType"

hammer"

class="

com.oracleoaec.autowired.Hammer"

如果有多个匹配就会报异常,可以用autowire-candidate=false来将某些bean排除:

knife"

com.oracleoaec.autowired.Knife"

autowire-candidate="

false"

1.AOP面向切面编程

是一种思想,struts有,spring也有

2.如何用spring实现?

1、导入相关的jar包

2、先定义一个目标类(其中有核心的逻辑,但共同的逻辑将会通过切面在切入点切入)

3、再定义一个切面Aspect操作类,在里面写上要重复切入到目标的逻辑

4、写配置文件,关键要配置,

aop:

config>

aspectref="

..."

pointcutexpression="

id="

.."

/aop:

pointcut>

beforemethod="

pointcut-ref="

aftermethod="

after-returningmethod="

…"

"

after-throwingmethod="

aspect>

after-returning和after类似,after是在方法逻辑执行完执行,after-returning是在方法返回后执行,核心区别是如果在方法中产生了异常,after是不会执行的,但after-returning会。

after-throwing是在遇到异常时执行method中的方法

around>

定义一个方法,有参数ProceedingJoinPoint,在里面写上前置、后置的逻辑,并在之间调用jp.proceed(),也可以灵活的通过条件判断决定是否要调用jp.proceed().

proceed()的返回值就是方法的返回值

jp.getArgs()返回一个Object数组,就是被代理的方法的参数值(如果根本没有参数,就返回一个长度为0的数组)

注解AOP

*在配置文件中<

aspectj-autoproxy/>

激活自动代理

context:

component-scanbase-package="

com.oracleoaec"

*在切面类(比如刚才那个例子中就是FileOperation)的类定义上面写上@Aspect注解,然后在这个切面类的方法上定义注解,前置注解@Before,后置注解@After,环绕注解@Around。

在这些注解里面还可以定义切入点point-cut,并写上类似execution(*com.oracleoaec.*.*())表达式。

AOP的基石----动态代理模式

代理模式

一、静态代理

被代理类(目标类)

代理类

1、目标类和代理类具有相同的接口

2、代理类中定义有一个属性,类型就是目标类(或者说代理类持有一个目标类对象的引用)

3、代理类的接口方法中会调用目标类的接口方法,并在其基础上添加一定的额外功能

静态代理必须事先知道目标类,才能再定义代理类

二、动态代理

1、JDK自带动态代理功能,InvocationHandler接口、Proxy

a、定义一个类实现InvocationHandler,并实现其抽象方法,并传入被代理的对象(目标对象)

b、Proxy.newProxyInstance(....)创建代理对象

所谓动态代理,就是在定义代理逻辑时,根本不需要知道未来被代理的是什么类,什么方法

而静态代理必须事先知道一些信息

注意:

JDK的动态代理的目标类,必须实现接口

2、cglib动态代理,目标类完全可以不实现任何接口

a、定义一个类实现MethodInterceptor接口,实现其抽象方法

b、创建一个Enhancer对象

调用其setSuperClass方法,传入被代理的目标类

调用setCallback方法,传入a中定义的类的实例,也就是要回调的代理逻辑

c、调用这个Enhancer对象的create方法,产生一个代理对象

1.spring和数据库

spring可以用bean的方式配置数据源datasource

dbcp、c3p0、纯jdbc(也勉强可以算一种数据源,只是没有连接池而已)

配置完后,可以像之前普通类一样通过getBean取出连接池对象。

再用getConnection()获取连接....

spring提供了默认的模板JdbcTemplate来处理大量重复的jdbc操作,这个JdbcTemplate也可以注册在applicationContext.xml文件中,注册成一个bean,而这个JdbcTemplate的bean内部又要包含一个DataSource的bean,比如类似:

dataSource"

com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="

close"

driverClass"

${jdbc.driverClassName}"

jdbcUrl"

${jdbc.url}"

user"

${jdbc.username}"

password"

${jdbc.password}"

property-placeholderlocation="

jdbc.properties"

jdbcTempldate"

....."

......"

...........

以上标签就将数据源装配jdbc的模板上。

2.模板包含数据源,而一般Dao包含模板对象

xxxDao"

...."

jdbcTemplate"

ref中的jdbcTemplate表示上下文中定义的模板bean的id

name中的jdbcTemplate表示这个Dao类中定义的属性名,要一致

dao一般注入业务层、service、biz。

可以使用spring的依赖注入,在Service中定义一个private的dao属性和public的setter方法,在xml中声明,让其自动注入。

spring声明式事务(不用编码,只用配置文件或者注解就自动进行事务控制)

默认的事务处理逻辑,只要遇到运行时异常就会自动回滚,没有遇到任何异常,会自动提交。

tx:

methodname="

save*"

propagation="

REQUIRED"

rollback-for="

java.lang.FileNotFoundException"

通过rollback-for可以配置遇到什么异常回滚

propagation事务传播机制

REQUIRED需要事务,如果当前存在事务,就使用当前事务,如果不存在就自动开启事务

REQUIRES_NEW每次都会开启一个新事务

NOT_SUPPORTED不需要事务,如果没有事务,就直接执行;

原来就有事务的话就挂起原来的事务,执行完这段逻辑再恢复

NEVER从不,如果没有事务,就正常执行;

如果有,就抛异常

一般最常用的是REQUIRED,保证有且只有一个事务运行

如果是纯查询的话,可以使用NOT_SUPPORTED结合READ-ONLY=true

注解事务

首先要在xml文件中声明

annotation-driventransaction-manager="

txManager"

打开注解驱动的事务管理

接下来就可以在需要自动事务管理的方法上,加上@Transactional进行事务控制

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1