java ren

matinhua的小站

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  189篇文章 :: 0篇收藏:: 39篇评论:: 3个Trackbacks

文章

收藏

相册

存档


正在读取评论……


1.Spring 的容器事务管理机制---参数化配置的事务管理
  UserDAOProxy节点配置了一个针对userDAO bean的事务代理(由
target属性指定)。

  运用:

  *注意这里须通过代理Bean"userDAOProxy"获得引用,而不是直接getBean(“userDAO”)
    InputStream is = new FileInputStream("Application-Context.xml");
 XmlBeanFactory factory = new XmlBeanFactory(is);
 UserDAO userDAO = (UserDAO) factory.getBean("userDAOProxy");
 userDAO.insertUser();


  *特点:将(事务)代码转移到了配置文件,并没有减少太多的工作量,事实上是如此。

2.template(模板模式):
  org.springframework.jdbc.core.JdbcTemplate:针对jdbc的封装的模板。

三.Hibernate in Spring
  1.hibernate的session是对jdbc的轻量级封装,它维护着一个connection
  2.ApplicationContext.xml对事务管理器的定义改为:
    org.springframework.orm.hibernate.HibernateTransactionManager">
  3.注意看UserDAO.java的定义结构:
    public class UserDAO extends HibernateDaoSupport implements IUserDAO
    {
 public void insertUser(User user) {
 getHibernateTemplate().saveOrUpdate(user);
 }
    }
 
  4.HibernateDaoSupport
    4.HibernateDaoSupport实现了HibernateTemplate和SessionFactory实例的关联。
 与JdbcTemplate类似,HibernateTemplate对Hibernate Session操作进行了封装

  5.IUserDAO userDAO = (IUserDAO)factory.getBean("userDAOProxy");
    这里并没有直接用UserDAO对获得的Bean实例进行强制转型。这与上面
JdbcTemplate的测试代码不同
    ,为了实现动态AOP,Spring在默认情况下会使用Java Dynamic
Proxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备
进行代理的方法
 
  6.AOP:而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步
骤或阶段(片断)
    AOP和OOD/OOP并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和
AOP设计思想,通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理
过程中的阶段进行隔离处理。即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,
AOP也能起到同样的作用。

  就是应用代码可以脱离AOP组件独立编译。(源代码组成无关性)


  7.proxy
    一般为处理某方法调用前后需要进行一此特殊处理,
    》定义一接口
    》定义一类实现该接口,在实现方法中写些代码,再次调用本接口方法。
   public void saveUser(User user) {
 UserTransaction tx = null;
 try {
 tx = (UserTransaction) (
 new InitialContext().lookup("java/tx")
 );
 userDAO.saveUser(user);//再次调用本接口方法,只不过是加上了事务处理的壳而以
 tx.commit();
        。。。。。。。

  8.dynamic proxy:

public class TxHandler implements InvocationHandler {
private Object originalObject;
public Object bind(Object obj) {
this.originalObject = obj;
return Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
if (!method.getName().startsWith("save")) {
UserTransaction tx = null;
try {
tx = (UserTransaction) (
new InitialContext().lookup("java/tx")
);
result = method.invoke(originalObject, args);
tx.commit();
} catch (Exception ex) {
if (null != tx) {
try {
tx.rollback();
} catch (Exception e) {
}
}
}
} else {
result = method.invoke(originalObject, args);
}
return result;
}
}//个代理类适用于所有接口的实现


*******************************************************************************
1.容器配置管理事务,通过动态AOP(dynamic proxy)实现;

2.运用对hibernate之session封装的模板(HibernateTemplate),简化代码;

3.IOC/DI的运用,用来控制组件之间的依赖关系,改由容器根据配置文件注入,注入到的组件里
  用set/get来声明一下(注入之type 2)

4.如果没有spring的IOC/DI,我们采用常规方法得:写配置文件,写factory方法,在factory方法里我们得读配置文件,来决定执行哪一个接口实现类。
 

 



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=204795


[点击此处收藏本文]  发表于2004年12月16日 5:03 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论