不完全依赖:
什么时候使用?
bean甲在bean乙之前实例化,但在bean乙中不需使用bean甲,常用于数据库开发,例如注册数据库驱动必须在所有操作之前完成,但在操作中是不会调用驱动的。
延迟初始化bean:
lazy-init=“true”
自动装配:
autowire=”“
default,no,byName,byType,constructor,autodetect(翻译为自动探测,通过自省机制决定constructor或byType)
依赖注入检查:
dependency-check=”“
default
none
simple对基本类型和集合类型
object对其他bean
all
bean的作用域:
scope=”“
singleton缺省
prototype
request
session
global session
方法注入:(比较少用)
什么时候使用?
例如向一个作用域为singleton的bean甲注入作用域为prototype的bean乙,对于bean甲来说,容器只会创建一个bean甲实例,这样,就没法让容器提供不同的bean乙实例
方法注入分两种方式:
lookup方法注入
自定义方法注入
定义bean的生命周期:
init-method=”bean中定义的初始化方法名“
destroy-method=”bean中定义的销毁方法名“
bean的继承:
标记为abstract 的bean是不能被实例化的,所以当调用getBean方法时将发生错误,这种bean 的作用就是让其他bean继承
面向切面编程
两种方式:
配置方式
注解方式:当需要完成一个特定功能时,只需对Java程序完成注解
技巧:普通AOP项目通常用注解方式,与其他框架整合时用配置方式
在ApplicationContext.xml中加入
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://ww.springframework.org/schema/aop/spring-aop-2.5.xsd
面向切面编程的作用:在某一类方法的特定位置,执行相同的功能。
例如,执行数据库时,不管执行什么操作都要执行关闭数据库的操作
示例:
package com.ycx.dao;
public class BookDAOImpl implement BookDAO{
public void addBook(String name,double price){
System.out.println("执行增加图书操作");
}
……
……
}
public class AspectJXML{
public void myAfterMethod(){
System.out.println("数据库操作后,释放数据库资源");
}
}
关键配置:
省略上面两个类的bean配置
<aop:config>
<aop:aspect id="myAspect" ref=""> 声明切面
<aop:pointcut id="allMethod" expression="execution(* com.ycx.dao.*.*(..))"/>
<aop:after pointcut-ref="allMethod" method="myAfterMethod"/>
</aop:aspect>
</aop:config>
使用注解方式开放AOP项目:
在ApplicationContext.xml中加入
<aop:aspectj-autoproxy/>以启动AspectJ组件技术
spring与hibernate整合:
事务管理:
编程式事务管理
声明式事务管理(常用,无需改动源代码,只需修改配置文件)
首先,必须在applicationContext.xml头文件中加入相关配置,xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://ww.springframework.org/schema/aop/spring-aop-2.5.xsd(面向切面编程所需)
xmlns:aop="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
http://ww.springframework.org/schema/ tx /spring- tx -2.5.xsd(事务管理所需)
关键配置:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name
通过注解方式进行事务管理:
在DAO程序类名上加@Transaction
在applicationContext.xml文件中加入<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true">