Spring 小结

深入理解Spring框架与实现思想
本文详细介绍了Spring框架中的核心概念,包括MVC、ORM、IOC、AOP等,并阐述了它们在实际开发中的应用。同时,文章还展示了如何在Spring框架下配置数据源、sessionFactory、事务管理及DAO、BIZ、Action层的注入关系,以及SpringAOP的几种通知类型。

框架与实现思想

MVC:模型视图控制器,表现层的的设计思想,Struts1是MVC的一个实现。

ORM:对象关系映射,持久化层的设计思想,hibernate是ORM的一个优雅实现。

IOC(DI): 控制反转或依赖注入(IOC与DI是从不同角度来说明一个问题),spring是IOC的一个实现。

IOC::Inverse Of Control 的缩写,叫控制反转:程序中没有写明创建哪一个对象,使用对象是由配置文件(容器)决定的。

DI:Dependency Injection 的缩写,叫依赖注入:程序中定义接口,程序运行需要实现类,这个类不是在编译阶段决定的,而是在程序运行过程中由容器注入的。

AOP:面向方面(切面)编程,spring是AOP框架的一个实现。

配置文件:当名字中包含特殊字符时,使用name属性

使用Spring容器得到的对象都是单态的。

对象的初始化方法,创建对象后被调用。

Spring AOP的几种通知

a.before advice(前置通知)实现了org.springframeword.aop.MethodBeforeAdvice接口的Advice,称之为前置advice,意思是在目标方法还没有执行之前执行。

b.after advice(后置通知)实现了org.springframeword.aop.AfterReturningAdvice接口的Advice,称之为后置的advice,意思是在目标方法执行之后执行。

c.throws advice(异常通知)实现了org.springframeword.aop.ThrowsAdvice接口的Advice,称之为exception advice(异常通知),该接口没有定义任何方法,但是在实现相应的ThrowsAdvice的时候,方法必须遵循一下规则:void after Throwing([Methods,args, target] , ThrowAbleSubclass)其中的[]中的三个参数可以省略,可以根据要拦截的ThrowAble的不同类型,在同一个ThrowsAdvice中实现多个AfterThrowing方法,Spring框架会使用java反射来调用这些方法。

d.around advice(环绕通知)实现了org.aopalliance.intercept.MethodInterceptor接口的advice,称之为aroundadvice ,就是直接拦截整个方法,方法的调用有程序员决定,前面我编写的advice虽然可以在目标方法调用前后别拦截,但并不能控制目标方法的执行,比如在目标方法没有执行之前,先做权限检查,如果有权限则执行该目标方法,否则不执行目标方法。这需要环绕advice。


添加事务后Spring配置文件各层的注入关系


<!-- 数据源层 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://127.0.0.1:1433"></property> <property name="username" value="sa"></property> <property name="password" value="630923"></property> </bean> <!-- sessionFactory层--> <bean id="sf"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> </props> </property> </bean> <!-- 事务管理层 --> <bean id="tm" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sf"></property> </bean> <!-- DAO层 --> <bean id="usersDAO" class="com.jeelon.dao.implement.UsersDAO"> <property name="sessionFactory"> <ref bean="sf" /> </property> </bean> <!-- BIZ层 --> <bean name="usersBiz" class="com.jeelon.biz.implement.UsersBizImpl"> <property name="userDAO" ref="usersDAO"></property> </bean> <!-- 事务代理层 定义父类(为了使得多个Biz时不全部写以增加冗余 写出这个父类 下面的只需要几层次代理父类即可 把不同的目标类taret写出即可) --> <bean id="BizProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="tm"></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <!-- 继承上面的代理事务 --> <bean id="moduleProxy" parent="BizProxy"> <property name="target" ref="usersBiz"></property> </bean> <!-- ...根据事务有多个BIZ 则可以写多个事务代理 都继承至上面什么的抽象代理父类 --> <!-- Action层 --> <bean name="/login" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean> <bean name="/findAll" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean> <bean name="/findById" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean> <bean name="/updateUser" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean> <bean name="/saveUser" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean> <bean name="/deleteUser" class="com.jeelon.view.action.UsersAction"> <property name="usersBiz" ref="moduleProxy"></property> </bean>




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值