A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youxiao123 初级黑马   /  2017-11-6 00:27  /  1619 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这只是一个标题党的做法!

首先推荐一个网站,可以常去逛逛:IBMdeveloperWorks
已经学了两天的spring框架,它好使吗?好使,给开发人员带来方便,给企业节省时间增加效益。但是也得有必要对它了解的深入一点。深入了解,你才能知道TA的好。

今天的AOP,有个知识点:静态织入与动态织入,看帖的你,你了解的清楚吗?认真听课的你是否忽略了呢!反正我是没有好好听课,所以总结了下补补,以免虚了。

静态织入:编译时织入(特殊编译器实现)、类加载时织入(特殊的类加载器实现)
    优缺点:性能好,但是较难实现,稳定性不高
动态织入:JDK代理,CGLIB代理
   优缺点:更稳定,但是限制颇多,且执行效率不高

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“切面”,从而使得编译器可以在编译期间织入有关“切面”的代码。然而殊途同归,实现AOP的技术特性却是相同的,分别为:
      1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
      2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
      3、advice(通知):是point cut的执行代码,是执行“切面”的具体逻辑。
      4、aspect(切面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
      5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。
      6、AOP代理(AOP Proxy):AOP框架创建的对象,这个对象通常可以作为目标对象的替代品,而AOP代理提供比目标对象更加强大的功能。真实的情形是,当应用调用AOP代理的方法时,AOP代理会在自己的方法中回调目标对象的方法,从而完成应用的调用。关于AOP代理的典型例子就是Spring中的事务代理Bean。通常,目标Bean的方法不是事务性的,而AOP代理包含目标Bean的全部方法,而且这 些方法经过加强变成了事务性方法。简单地说,目标对象是蓝本,AOP代理是目标对象的加强,在目标对象的基础上,增加属性和方法,提供更强大的功能。
目标对象包含一系列切入点。切入点可以触发处理连接点集合。用户可以自己定义切入点,如使用正则表达式。AOP代理包装目标对象,在切入点处加入处理。在切入点加入的处理,使得目标对象的方法功能更强。Spring 默认使用JDK动态代理实现AOP代理,主要用于代理接口。也可以使用CGLIB代理。实现类的代理,而不是接口。如果业务对象没有实现接口,默认使用 CGLIB代理。但面向接口编程是良好的习惯,尽量不要面向具体类编程。因此,业务对象通常应实现一个或多个接口。
      7、目标对象(Target Object):包含一个连接点的对象,也被称为代理对象。
      8、 前置通知(Before advice):在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。
      9、后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。
      10、返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
      11、环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。
      12、抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。

常用注解
--定义Bean的注解
@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action

@Service         
@Service("Bean的名称")
定义业务层Bean

@Repository   
@Repository("Bean的名称")
定义DAO层Bean

@Component  
定义Bean, 不好归类时使用.

--自动装配Bean (选用一种注解就可以)@Autowired  (Srping提供的)
默认按类型匹配,自动装配(Srping提供的),可以写在成员属性上,或写在setter方法上

@Autowired(required=true)  
一定要找到匹配的Bean,否则抛异常。 默认值就是true

@Autowired
@Qualifier("bean的名字")
按名称装配Bean,与@Autowired组合使用,解决按类型匹配找到多个Bean问题。

@Resource   JSR-250提供的
默认按名称装配,当找不到名称匹配的bean再按类型装配.
可以写在成员属性上,或写在setter方法上
可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.
@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.

@Inject   是JSR-330提供的
按类型装配,功能比@Autowired少,没有使用的必要。

--定义Bean的作用域和生命过程@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession

@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。

@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。

--声明式事务@Transactional

9 个回复

倒序浏览
满满干货
回复 使用道具 举报
不错不错,全是干货
回复 使用道具 举报
6666
回复 使用道具 举报
小伙子好腻害的样子
回复 使用道具 举报
回复 使用道具 举报
文涛徒弟
回复 使用道具 举报
渐暖 中级黑马 2017-12-1 16:21:40
8#
很不错!赞赞赞
回复 使用道具 举报
不忘初心坚持到底
回复 使用道具 举报
乘风破浪
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马