ITPub博客

首页 > IT职业 > IT生活 > spring学习(转载)

spring学习(转载)

原创 IT生活 作者:wzdoxu88 时间:2007-08-01 15:59:14 0 删除 编辑

spring学习笔记
一、Spring中两个十分重要的概念——IOC/DI & AOP
1.IOC/DI(Inverse of control/Dependence Injection)
IOC:控制反转,看起来比较牛B,说起来十分简单。就是不使用传统的将类的依赖关系用硬编码来维护的方式,而是让容器来管理类之间的依赖,依赖关系在全在一个配置文件上。这样,就将造成耦合的根源——复杂的依赖关系,进行了统一的,集约式管理。

DI:依赖注入,其实就是控制反转。只是比IOC的表达稍微好点,更能望文生意些。依赖注入,简单地说,就是在运行期间,由容器将组件之间的依赖关系注入到组件中。

IOC/DI的作用:有了这样的设计,我们只需要专心编写一个个高内聚的零件,而不用关心这些零件如何组合起来工作。这个问题是由依赖关系的配置文件需要关注的。这样将组件和依赖分离,提高了组件的可重用性。

三种IOC/DI方式:
1.接口注入:
将实现类的对象赋给接口的引用。实现类的对象是通过配置文件描述,由容器负责创建的。
注意:目前部门使用的BS,就是这种方式。
2.值注入:
通过setxxx方法,将依赖关系注入到某个具体的对象中。Spring使用最多的依赖注入方式就是值注入。
3.构造子注入:
容器调用实现类的购造器,将依赖作为构造器的参数注入,一次性构建一个稳定的对象。

后两种依赖注入方式的比较:
1.值注入:自然,直接,简洁,但不稳定(如果在set的时候发生并发访问,可能会出现很严重的状况)
2.构造子注入:复杂,但很稳定(一次性创建,在创建阶段就将依赖注入了,创建完成后,就已经是一个完成的,稳定的对象),而且可以很好地控制依赖注入的顺序关系。


2.AOP(Aspect Oriented Programming)
AOP:翻译为面向方法编程,网上说比较确切的说法是面向切面编程。我个人认为,说成是面向动作编程好象更加贴切。因为AOP是将某类动作高度内聚的编程方法。

AOP的特点:1.切分动作 2.源代码无关性

AOP在Spring中的应用:事务管理机制

Spring事务管理机制的基本原理:
1.用一个动态Proxy类加载所有的配有事物管理的Bean
2.根据配置的事务触发点做if判断,然后在方法的前后加上事务处理的代码

Spring中的两种AOP方式:
1.Proxy:面向接口
2.CGLIB:面向Class

对于AOP在Spring中的应用还不是十分清楚,需要加强。

二、struts+spring+hibernate 整合
1.在Eclipse中创建项目
2.加入struts
3.加入spring
4.加入hibernate
5.整合struts&spring
1)通过plug-in将struts与spring对接
2)通过action的type属性将Action的控制权转给spring
3)spring中配置action的实现类
6.整和spring+hibernate
1)只需要配置spring中的sessionFactory就可以了。十分方便。
2)为数据库访问类配置spring的事务管理,使得持久层的操作可以在spring的控制范围之内。


(注意:以上内容比较简单,纯属记录个人学习过程。而且由于刚刚接触spring,水平有限。不足之处,请多多原谅)

附:登录模块示例

配置文件部分


Struts配置:struts-config.xml

http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">









type="org.springframework.web.struts.DelegatingActionProxy"
name="loginForm"
scope="request"
parameter="method">








Spring配置:applicationContext.xml

http://www.springframework.org/dtd/spring-beans.dtd">


class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

/WEB-INF/classes/hibernate.cfg.xml



class="org.springframework.orm.hibernate3.HibernateTransactionManager">





class="com.neusoft.apps.login.bp.LoginBSImp">




from LOGIN login where login.aae011=? and login.aae012=?



class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">










PROPAGATION_REQUIRED
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly




class="com.neusoft.apps.login.rp.LoginAction"
singleton="false">





Hibernate配置:hibernate.cfg.xml:略,没什么好看的,就是配了个数据源


代码部分:

Action:

package com.neusoft.apps.login.rp;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.neusoft.apps.login.LoginBS;

public class LoginAction extends DispatchAction{

private LoginBS dao;

public ActionForward login(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
LoginForm form = (LoginForm) actionForm;
if(dao.isValidUser(form.getAae011(),form.getAae012()))
return actionMapping.findForward("ok");
else
return actionMapping.findForward("failed");
}

public LoginBS getDao() {
return dao;
}

public void setDao(LoginBS dao) {
this.dao = dao;
}
}

DAOImp:

package com.neusoft.apps.login.bp;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.neusoft.apps.login.LoginBS;

public class LoginBSImp extends HibernateDaoSupport implements LoginBS{
private SessionFactory sessionFactory;

private String hql;

public boolean isValidUser(String username, String password) {
// TODO Auto-generated method stub
List userList = this.getHibernateTemplate().find(hql, new Object[]{username,password});
if(userList.size() > 0)
return true;
else
return false;
}

public String getHql() {
return hql;
}

public void setHql(String hql) {
this.hql = hql;
}


}

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9294812/viewspace-930029/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 理解spring (转载)
请登录后发表评论 登录
全部评论
  • 博文量
    49
  • 访问量
    521866