Spring 小结

框架与实现思想      

 

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>




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值