1.spel(动态生成)
#{}可以是别的bean,可以是别的bean属性,可以是方法(动态为属性赋值),可以是正则(matches),可以有运算符(+-*/^ )比较运算符(>,<,>=,<=,==)逻辑运算符(and,or,not,|,?:),可以 T(). 方式静态方法属性调用。
2.spring容器对bean中声明了init-method和destroy-method的方法在初始化和销毁时进行调用,可以在配置文件中配置或者注解。在注解开发使用
@PostConstruct和@PreDestroy
除了定义上述2个方法外,spring还提供了一个接口可以实现bean在init的前后添加自己的逻辑BeanPostProcessor
public class BeanPostPrcessorImpl implements BeanPostProcessor {
// Bean 实例化之前进行的处理
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "开始实例化");
return bean;
}
// Bean 实例化之后进行的处理
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "实例化完成");
return bean;
}
}
这2个接口方法返回bean用户可以自定义实现偷梁换柱
只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,容器在加载它的时候回特殊处理(applicationcontext可以,而beanfactory则需要另外的方式),如下所示:
<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>
3.除了xml配置bean,注解,java类,groovy配置
4.xml中配置bean除了直接配置类还可以使用静态工厂和实例工厂创建bean(用的少),spring还提供了一个接口FactoryBean,这样配置到
xml文件后容器发现这个bean实现了FactoryBean会自动调用生成bean的方法。
5.跨域引用使用<aop:scoped-proxy/>。需要引入CGLib的jar包。
6.在使用注解方式加载bean用<context:component-scan base-package="包1,包2">可以使用context:include-filter现在只需要哪些包和context:exclude-filter排除哪些包。
7.泛型依赖注入:只需要在父类中建立好依赖注入的泛型,子类会根据在显示的时候创建的T对应的替换类型自动建立子类之间的依赖关系。
8.aop术语:切面,通知,目标,代理。
连接点:程序执行到程序的某个位置,相当于方法执行前后者执行后
切点:相当于一个连接点的查询条件,一个切点对应多个连接点。
可以使用@order(权值)指定优先级
重用切点表达式:写一个空方法写上切入表达式,其他方法都是用这个方法作为切入点
9.jdbcTemplate和NamedParameterJdbcTemplate简化常规JDBC操作,模板方法操作。NamedParameterJdbcTemplate可以根据根据实体属性与数据库字段进行名称相同的映射,这样在插入和获取时取出数据时已经做了相应的转化。
10.事务(传播性,隔离性,异常是否回滚,只读,超时)
jdbc有DataSourceTransactionManger(mybatis也使用这个)
javaEE代码事务有JtaTransactionManger
hibernate有HibernateTransactionManger
以前普通java实现jdbc事务使用的是try...catch方式在不同的地方提交事务、回滚事务关闭连接等,针对切面来说也就是可以针对
不同的方法在不同的地方实现一个切面编程的模型,使用spring的AOP技术可以实现这种模式变得简单。
编程式事务和声明式事务
注解式声明式事务:xml配置数据源和事务以及<tx:annotation-driven transcation-manger="事务引用"/>,在需要事务的方法上加上transactional
编程式事务提供了事务模板(比较麻烦)
异常继承runtimeException
事务传播性:
require 底层方法将使用上层方法的事务(默认的传播行为) @Transactional(propagation=Propagation.REQUIRES)
require_new 底层方法使用自己的事务,成功自己可以提交 @Transactional(propagation=Propagation.REQUIRES_NEW)
Propagation : key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
事务的隔离级别:
isolation指定,常用READ_COMMITTED
ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
异常是否回滚(默认有异常就回滚)
readonly 指定事务为只读事务,帮助数据库优化
timeout 指定强制回滚之前事务可以占用的时间,如果时间超过则事务自动回滚。
#{}可以是别的bean,可以是别的bean属性,可以是方法(动态为属性赋值),可以是正则(matches),可以有运算符(+-*/^ )比较运算符(>,<,>=,<=,==)逻辑运算符(and,or,not,|,?:),可以 T(). 方式静态方法属性调用。
2.spring容器对bean中声明了init-method和destroy-method的方法在初始化和销毁时进行调用,可以在配置文件中配置或者注解。在注解开发使用
@PostConstruct和@PreDestroy
除了定义上述2个方法外,spring还提供了一个接口可以实现bean在init的前后添加自己的逻辑BeanPostProcessor
public class BeanPostPrcessorImpl implements BeanPostProcessor {
// Bean 实例化之前进行的处理
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "开始实例化");
return bean;
}
// Bean 实例化之后进行的处理
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "实例化完成");
return bean;
}
}
这2个接口方法返回bean用户可以自定义实现偷梁换柱
只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,容器在加载它的时候回特殊处理(applicationcontext可以,而beanfactory则需要另外的方式),如下所示:
<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>
3.除了xml配置bean,注解,java类,groovy配置
4.xml中配置bean除了直接配置类还可以使用静态工厂和实例工厂创建bean(用的少),spring还提供了一个接口FactoryBean,这样配置到
xml文件后容器发现这个bean实现了FactoryBean会自动调用生成bean的方法。
5.跨域引用使用<aop:scoped-proxy/>。需要引入CGLib的jar包。
6.在使用注解方式加载bean用<context:component-scan base-package="包1,包2">可以使用context:include-filter现在只需要哪些包和context:exclude-filter排除哪些包。
7.泛型依赖注入:只需要在父类中建立好依赖注入的泛型,子类会根据在显示的时候创建的T对应的替换类型自动建立子类之间的依赖关系。
8.aop术语:切面,通知,目标,代理。
连接点:程序执行到程序的某个位置,相当于方法执行前后者执行后
切点:相当于一个连接点的查询条件,一个切点对应多个连接点。
可以使用@order(权值)指定优先级
重用切点表达式:写一个空方法写上切入表达式,其他方法都是用这个方法作为切入点
9.jdbcTemplate和NamedParameterJdbcTemplate简化常规JDBC操作,模板方法操作。NamedParameterJdbcTemplate可以根据根据实体属性与数据库字段进行名称相同的映射,这样在插入和获取时取出数据时已经做了相应的转化。
10.事务(传播性,隔离性,异常是否回滚,只读,超时)
jdbc有DataSourceTransactionManger(mybatis也使用这个)
javaEE代码事务有JtaTransactionManger
hibernate有HibernateTransactionManger
以前普通java实现jdbc事务使用的是try...catch方式在不同的地方提交事务、回滚事务关闭连接等,针对切面来说也就是可以针对
不同的方法在不同的地方实现一个切面编程的模型,使用spring的AOP技术可以实现这种模式变得简单。
编程式事务和声明式事务
注解式声明式事务:xml配置数据源和事务以及<tx:annotation-driven transcation-manger="事务引用"/>,在需要事务的方法上加上transactional
编程式事务提供了事务模板(比较麻烦)
异常继承runtimeException
事务传播性:
require 底层方法将使用上层方法的事务(默认的传播行为) @Transactional(propagation=Propagation.REQUIRES)
require_new 底层方法使用自己的事务,成功自己可以提交 @Transactional(propagation=Propagation.REQUIRES_NEW)
Propagation : key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
事务的隔离级别:
isolation指定,常用READ_COMMITTED
ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
异常是否回滚(默认有异常就回滚)
readonly 指定事务为只读事务,帮助数据库优化
timeout 指定强制回滚之前事务可以占用的时间,如果时间超过则事务自动回滚。