1.依赖注入(DI)(IOC)
对象本身不负责对象的创建和维护,将控制权转交给外部的容器实现,降低程序的耦合度,只提供java方法让容器决定依赖关系,依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象,使用
以多种方式实现依赖注入,分为构造注入,p命名注入;
构造注入
在applicationContext.xml中使用
P命名注入
P:PropertyName="Variable"
注入数据类型
2.增强类型
异常抛出增强
public static ErrorLogger implements ThrowsAdvice{
void affterThrowing(Method method,Object\[\]args,Object target,SQLException ex);
void afterThrowing(SQLException ex);
void afterThrowing(RunntimeException ex);
}
环绕增强
在目标方法前后可以织入增强,其根本就是加强控制权的转交.
public class AroundLogger implements MethodInterceptor{
@Override
Object Invoke(MethodInvocation arg0){
…
try{
arg0.proceed();
}catch(Throwable e){
…
}
}
}
注解定义增强
spring通过@AcpectJ实现注解增强,在AspectJ5新增的功能,
@Aspect
public class BizLogger{
@Before("execution(* biz.Biz.*(..))")
void before(){
}
@AfterReturning("execution(* biz.Biz.*(..))")
void afterRuterning(){
…
}
}
@Before将before定义为前置增强,@AfterReturning将afterReturning()定义为后置增强
同时需要在applicationContext.xml定义配置文件
也可以通过注解定义环绕增强
@Aspect
class AroundLogger{
@Around("execution(..)")
Object aroundLogger(ProceedingJoinPoint jp){
try{
Object result= jp.procees();
}catch(Throwable ex){
}
}
}
3.SessionFactory
通过定义class为org.springframework.orm.hibernate3.LocalSessionFactoryBean指定文件位置后需要为对象提供关系映射文件
在对DAO业务开发时提供HIbernateTemplate接口进行开发
public class DaoImpl extends HibernateDaosupport implements Dao{
void Update(object entity);
void delete(Object entity);
Object getClass(Class entityClass,Serializable id);
void saveOrUpdate(Object entity);
}
4.事务处理
在硬编码中容易产生复杂,spring提供事务处理进行代码与业务分离,降低开发和维护难度通过配置tx和aop进行事务处理操作
通过在bean标签中定义
propagation:事务传播
REQUIRED:默认值,如果存在一个事务,则支持当前事务,如果没有创建一个
SUPPORT:如果存在支持当前事务,如果没有按非事务方式执行
MANDATORY:存在支持,没有抛出异常
REQUIRES_NEW 总是开启一个事务,存在挂起,没有新事务执行
NOT_SUPPORTED 非事务执行,存在挂起
NEVER:非事务执行
NESTED:不再在当前活动事务,则创建嵌套事务
isolation:事务隔离级别默认为DEFAULT
read-only:事务是否只读
rollback-for:设置回滚异常
no-rollback-for:设置不回滚异常类型
5.web.xml
ContextLoaderListener
Spring需要提供监听服务来控制容器在web.xml进行创建
OpenSessionInViewFilter
作用把Hibernate Session和一次完整的请求过程绑定,保证在一次请求过程中始终保持一个Session在开启,解决了延迟加载等问题
6.Bean Scope
除了可以对bean进行注入,也可以指定作用域,决定spring的组建策略,影响程序的运行效率和数据安全主要分为5种
Snigleton :默认值,以单例创建实例,保证实例只有一个,为gc减轻负担
prototype: 每次从容器获取bean时,创建一个实例
request :for Web,针对HTTP请求会创建一个实例
session:web同一个会话共享一个实例,不同的会话使用不同的实例
global Session:仅在Portlet的WEB,同一个全局共享一个实例.
7.JNDI
spring提供饮用JNDI资源的JndiObject'FactoryBean类
class="org.springframework.jndi.JndiObjectFactoryBean">
8.注解SessionFactory
通过定义annotationsessionfactorybean配置注解,是LocalSessionFactoryBean子类,需要进行一下配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation,AnnotationSessionFactoryBean"
9.自动装配
在需要过多的配置量时,可通过自动装配实现autowire进行自动装配,可以配置以下属性
no 不使用自动配置
byType 根据属性自动装配,如果有一个依赖属性类型则自动装配,如果有多个则抛出一场,如果没有匹配bean,属性不会被设置
byName 根据属性名进行配置,找出id与属性的setter方法匹配的bean,找到自动注入
constructor:应用于构造起参数,如果没有找到一致的Bean,则抛出异常.
通过使用default-autoWire进行减少维护注入方式
10.依赖检查
可以使用依赖检查来保证Bean属性正确的设置,通过
none:不进行依赖检查
obejcts:检查BeanFactory中其他Bean的依赖
sunple 检查原始
all:同时检查
11.注解定义Bean
利用@Component进行映射配置
@Repository 用于标注DAO类
@Service 用于标注业务类
@Controller 用于标注控制器
@Qualifier用于标注按名称匹配方式
@AutoWired进行自动装配
@Scope用与进行作用于匹配
当需要使用注解进行操作需要在xml进行以下配置
1.添加context命名空间
2.标注扫描包中的类
也可以通过注解配置事务处理
在业务方法中添加@Transactional实现,具有以下特性
1.传播设置PROPEAGATION_REQUIRED
2.隔离级别为ISOLATION_DEFAULT
3.事务为r/w
4.超时默认以来事务处理
手机扫一扫
移动阅读更方便
你可能感兴趣的文章