黑马程序员--Spring Aop 面向切面编程,实现前置通知

 

Spring Aop 面向切面编程,实现前置通知

耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中个模块间相互联系紧密程度的一种度量。

模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。


OOP:
AOP:aspect oriented program.不改变源代码,还给类增加新的功能.(代理)


Session s = SessionFactory.openSession();
Transaction tx = s.beginTransaction();
s.save(..);
tx.commit();
s.close();

切面:aspect,要实现的交叉功能.


通知:切面的实际实现,比较具体(细化).


连接点:可以将通知应用到目标程序中的地点.(方法调用,异常抛出,要修改的字段)


切入点:真正的将通知应用到目标程序中的地点.


引入:为类增加新的方法和属性.


目标对象:被通知的对象.


代理:把通知应用给目标对象以后,创建暂新的对象,该对象即为代理对象.


织入:把通知应用给目标对象以后,创建暂新的对象的过程即为织入.


 1.编译期织入:当把java源代码编译成字节码class文件时,将通知织入.需要特殊的编译器.
 2.类装载期织入:当把class文件载入到jvm时,将通知织入.
 3.运行期(runtime)织入:
spring代理方式
 1.接口代理(jdk的动态代理):
 2.对类代理(cglib代理):

 

aop联盟:

使用spring开发aop:
 1.引入aop联盟类库.(spring.jar已经内置了该包)
 2.引入cglib类库实现对类代理.${spring解压目录}/lib/cglib/*.jar

PointCut{
 ClassFilter getClassFilter();
 MethodMatcher getMethodMatcher();
}

interface ClassFilter{
 boolean isMatch(Class clazz);
}

interface Methodmatcher{
 boolean matches(Method m,Class targetClass);1.
    boolean isRuntime();2.
    boolean matchers(Method m,Class target,Object[] args);3.
}

MethodBeforeAdvice|AfterReturningAdvice|MethodInterceptor
Advisor{
 
}

使用aspectj进行aop开发
 1.引入aspectj类库
  ${spring解压目录}/lib/aspectj/*.jar
 2.


pojo:plain old java object.
使用pojo + xml

dao:data access object.(数据访问对象)

 


<!-- 创建目标对象bean -->
<bean id="welcomeServiceTarget" class="cn.csdn.spring.service.WelcomeServiceImpl">
  <property name="name" value="tom"/>
</bean>
<!-- 创建通知内容的bean -->
<bean id="myMethodBeforeAdvice" class="cn.csdn.spring.advice.MyMethodBeforeAdvice"/>

<!-- 创建代理bean
  注意创建代理Bean需要有三个Property要设置,代理的接口(proxyInterfaces)也可以不写
 -->
<bean id="welcomeService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <!-- 接口 -->
 <property name="proxyInterfaces">
   <list>
      <value>cn.csdn.spring.service.WelcomeService</value>
   </list>
 </property>
 
 <!-- 要切入的通知内容 -->
 <property name="interceptorNames">
    <list>
     <value>myMethodBeforeAdvice</value>
    </list>
 </property>
 
 <!-- 选择目标对象 -->
 <property name="target" ref="welcomeServiceTarget"/>
</bean>


//
配置后置通知
1)定义通知 
public class MyMethodAfterAdvice implements AfterReturningAdvice {

}
2)
        <!-- 要切入的通知内容 -->
 <property name="interceptorNames">
    <list>
     <value>myMethodBeforeAdvice</value>
     <value>myMethodAfterAdvice</value>
    </list>
 </property>

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值