为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Spring入门篇_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Spring入门篇

moocer JAVA开发工程师
难度中级
时长 7小时 0分
  • 使用ExpressionPointcut接口 Spring2.0在Pointcut的基础上引入了一个ExpressionPointcut接口.通过切入点表达语言来描述切入点.有了ExpressionPointcut可以更加简单的方式来描述切入点. 切入点指示符用来指示切入点表达式目的,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点 within:用于匹配指定类型内的方法执行 this:用于匹配当前AOP代理对象类型的执行方法,注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配 target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配 args:用于匹配当前执行的方法传入的参数为指定类型的执行方法 @within:用于匹配所持有指定注解类型内的方法 @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解 @args:用于匹配当前执行的方法传入的参数持有指定注解的执行 @annotation:用于匹配当前执行方法持有指定注解的方法 AspectJ切入点支持的切入点指示符还有:call、get、set、preinitialization、staticinitialization、initialization、handler、adviceexecution、withincode、cflow、cflowbelow、if、@this、@withincode;但Spring AOP目前不支持这些指示符 AspectJ类型匹配的通配符: *:匹配任何数量字符 ..:匹配任何数量字符的重复如在类型模式中匹配任何数量子包,而在方法参数模式中匹配任何数量参数 +:匹配指定类型的子类型,仅能作为后缀放在类型模式后边 例如excution(*Money(..)),配合"ProxyFactoryBean"的target,表示执行所有Component的带有"Money"的方法.
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 配置xml文件 <beans..> //使用之前定义的前置通知 <bean id="beforeAdvice" class="com.own.BeforeAdvice"/> //继续使用Component实现类 <bean id="component" class="com.own.Component"/> //引入bean(Jdk..或Per..) <bean id="pointcutBean" class="org.springframework.aop.support.JdkRegexpMethodPointcut"> <property name="pattern"> //使用正则表达式,这里表示匹配所有带有"Mon"的方法 <value>.*mon.*</value> </property> //表示除去setMoney()方法 <property name="ExcludedPattern" value="setMoney" /> </bean> //引入该类 <bean id="defaultAdvisor" class="org.springframework.aop.support.DefaultpointcutAdvisor"> //调用相应通知 <property name="advice" ref="beforeAdvice"/> //关联切入点 <property name="pointcut" ref="pointcutBean"/> </bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="com.own.IComponent"/> <property name="target" ref="component"/> //拦截器为DefaultPointcutAdvisor <property name="interceptorNames" value="defaultAdvisor" /> </bean> </beans> 当获取到代理类并调用getMoney()方法,就会执行beforeAdvice前置通知
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 113
    查看全部
    0 采集 收起 来源:Advice扩展

    2016-03-11

  • @·为什么是spring 简单、方便、快捷
    查看全部
    0 采集 收起 来源:Spring概况

    2016-03-11

  • 使用JdkRegexpMethodPointcut与Perl5RegexpMethodPointcut类 步骤: 1.定义一个接口 2.定义一个类实现该接口 3.仍然使用前面的前置通知代码 4.编写配置文件,引入bean(包括DefaultPointcutAdvisor与JdkRegexpMethodPointcut或Perl5RegexpMethodPointcut) 由于这两个都是正则表达式切入点的描述,在使用方法上都一样,只是引入不同的bean. JdkRegexpMethodPointcut需要在JDK1.4及以上的环境运行.不需要额外的库. Perl5RegexpMethodPointcut需要把jakarta-oro-xx.jar文件放在classpath上. 它们均有两个属性. 1.pattern(String类型)或patterns(List类型)属性:前者表示单个正则表达式,后者表示多个正则表达式,支持<list>配置. 2.ExcludedPattern(String类型)或ExcludedPatterns(List<String>类型)属性:前者表示排除某个字符串,后者表示排除一组字符串,支持<list>配置.
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • @·spring是什么? ·Spring是一个开源框架,为了解决企业应用开发的复杂性而创建,但现在已经不止应用于企业应用。 ·是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架
    查看全部
    0 采集 收起 来源:Spring概况

    2016-03-11

  • 111
    查看全部
    0 采集 收起 来源:Advice扩展

    2016-03-11

  • NameMatchMothodPointcut类中只有一个属性 mappedName(String类型) 或者 mappedNames(List类型). 前者表示映射单个字符串,后者表示映射一组字符串. 测试类中: ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); //获取代理对象 IComponent com=(IComponent)context.getBean("proxy"); //调用方法 com.getMoney(); 因为mappedNames属性中的属性值为get* 因此当调用Component类以get开头的方法被执行之前都会调用id为"beforeAdvice"的前置通知. 控制台显示: 用户验证 取到了2000RMB
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 112
    查看全部
    0 采集 收起 来源:Advice扩展

    2016-03-11

  • 使用NameMatchMethodPointcut类 步骤: 1.定义一个接口 2.定义一个类实现该接口 3.仍然使用前面的前置通知代码 4.编写配置文件,引入bean(包括DefaultPointcutAdvisor与NameMatchMethodPointcut) 配置xml文件 <beans..> //使用之前定义的前置通知 <bean id="beforeAdvice" class="com.own.BeforeAdvice"/> //继续使用Component实现类 <bean id="component" class="com.own.Component"/> //引入该类 <bean id="pointcutBean" class="org.springframework.aop.support.NameMatchMethodPointcut"> <property name="mappedNames"> <list> //使用通配符 <value>get*</value> </list> </property> </bean> //引入该类 <bean id="defaultAdvisor" class="org.springframework.aop.support.DefaultpointcutAdvisor"> //调用相应通知 <property name="advice" ref="beforeAdvice"/> //关联切入点 <property name="pointcut" ref="pointcutBean"/> </bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="com.own.IComponent"/> <property name="target" ref="component"/> //拦截器为DefaultPointcutAdvisor <property name="interceptorNames" value="defaultAdvisor" /> </bean> </beans>
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 前面讲到了用NameMatchMethodPointcutAdvisor和RegexpMethodPointcutAdvisor提供了对一定命名规则和正则表达式对切入点的封装. DefaultPointcutAdvisor则提供了一个切入点的支持.Spring提供了4种用来定义切入点的类,分别为: 1.NameMatchMethodPointcut 2.JdkRegexpMethodPointcut 3.Perl5RegexpMethodPointcut 4.ExpressionPointcut(接口) 这3个类和1个接口都可以用来定义切入点,再由DefaultPointcutAdvisor类来对这3个类和1个接口来进行封装并为切入点配置相应通知. DefaultPointcutAdvisor类的使用很简单.它有一个advice及pointcut属性. advice属性(Object类型):用来指明要使用的通知,使用ref关联. pointcut属性(Object类型):用来指定切入点,使用ref关联. 在xml配置文档中引入DefaultPointcutAdvisor该bean的时候,可以使用构造注入和设值注入.
    查看全部
    0 采集 收起 来源:配置切面aspect

    2016-03-11

  • 使用(RegexpMethodPointcutAdvisor)步骤: 1.定义一个接口 2.定义一个类实现该接口 3.仍然使用前面的前置通知代码 4.编写配置文件,引入bean 使用通配符定义切入方法未免不够灵活,spring提供使用正则表达式定义切入点的方法, 即使用RegexpMethodPointcut方式定义切入点,当切入点被调用时执行相关通知, 使用前必须在classpath中加入jakarta.common.ORO类库. <beans..> <bean id="beforeadvice" class="com.own.BeforeAdvice"> <bean id="component" class="com.own.Component"/> <bean id="regExpAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="pattern" value=".*money" /> <property name="advice" ref="beforeadvice" /> </bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="com.own.IComponent" /> <property name="target" ref="component" /> <property name="interceptorNames" value="regExpAdvisor"/> </bean> </beans> 定义了id为regExpAdvisor的bean,它指向RegexMethodPointcutAdvisor类.该类有两个属性 pattern属性:指定需要执行通知的完整类名称以及方法名称的规则 这里使用了正则表达式,结合ProxyFactoryBean中的target属性,表示Component类中所有以"money"结尾的方法被调用时均执行前置通知方法. advice属性:表示需要执行的通知
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 使用(NameMatchMethodPointcutAdvisor)步骤: 1.定义一个接口 2.定义一个类实现该接口 3.仍然使用前面的前置通知代码 4.编写配置文件,引入bean <beans..> //前置通知 <bean id="beforeadvice" class="com.own.BeforeAdvice"> <bean id="component" class="com.own.Component"/> <bean id="namemethod" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> //使用了通配符 <property name="mappedName" value="get*" /> <property name="advice" ref="beforeadvice" /> </bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="com.own.IComponent" /> <property name="target" ref="component" /> <property name="interceptorNames" value="namemethod" /> </bean> </beans> 这里定义了一个namemethod的bean,它指向NameMatchMethodPointcutAdvisor类 该类有两个属性 mappedName属性:表示所要映射的方法名称(List类型),配置时可以使用<list>标签在其下使用<value>标签,或直接使用value属性配置一个值.可以使用通配符.也可以指定一个具体的方法名.不能使用<ref>,因为是名称 advice属性:表示将要使用的通知(Object类型) 同时将ProxyFactoryBean的interceptorNames属性修改为namemethod 测试类一样.当调用带有get开头的方法,就会执行xml文件配置的前置通知
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

  • 前面的4种通知都是针对一个实体类来说的. Spring中提供了两种方式来定义只针对某个类的某个方法执行相关的通知 (即定义切入点并为切入点配置相应的通知,当切入点被调用时便执行相应通知). 1.使用NameMatchMethodPointcutAdvisor来指定要执行通知的方法. 2.使用RegexpMethodPointcutAdvisor(正则表达式)来定义要执行通知的方法. 通配符 *与? *:表示匹配任意0个到多个字符. ?:表示匹配任意一个字符. 正则表达式: .:表示匹配任意字符 *:表示匹配任意次数 ?:表示匹配0次或1次,用来限定该符号左边的符号. +:匹配前面的子表达式一次或多次. \:正则表达式连接符 []:表示匹配方括号里指定的字符 [a-z]:表示字符范围.匹配指定范围内的任意字符.
    查看全部
    0 采集 收起 来源:配置切面aspect

    2016-03-11

  • 修改xml配置文件: <beans..> <bean id="throwadvice" class="com.own.ThrowAdvice"/> <bean id="component" class="com.own.Component"/> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="com.own.IComponent" /> <property name="target" ref="component" /> <property name="interceptorNames"> <list> <value>throwadvice</value> </list> </property> </bean> </beans> 测试类中: ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); IComponent con=(IComponent)context.getBean("proxy"); try{ //会抛出异常 con.getMoney(); } catch(Throwable t){ //输出具体异常信息 System.out.println(t); } 控制台显示: 取到了2000RMB 有异常抛出 java.lang.Exception:发生异常..
    查看全部
    0 采集 收起 来源:配置切面aspect

    2018-03-22

举报

0/150
提交
取消
课程须知
Java的高级课程,适合对Java基础知识应用自如,并熟悉MVC架构的小伙伴们。如果想成为一名Java工程师,这门课程是一定要学哒。
老师告诉你能学到什么?
掌握依赖注入、IOC和AOP的概念,并能进行简单应用。
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!