首页 > IT职业 > IT生活 > spring学习(转载)
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">
name="loginForm"
scope="request"
parameter="method">
Spring配置:applicationContext.xml
http://www.springframework.org/dtd/spring-beans.dtd">
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;
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9294812/viewspace-930029/ ,如需转载,请注明出处,否则将追究法律责任。