慕粉18755117234
慕先生9586111
1、Before Advice 放在 defaultAdvisor 中,是引用了 pointcut,该切入点会匹配代理类中的 sa 开头的方法;
2、另外三种不引用 pointcut,则不会单单匹配代理类中 sa 开头的方法,而是直接匹配代理类中的所有方法.
3、在 ProxyFactoryBean 中 <property name="interceptorNames"> 配置要引用的通知,默认就已经自动匹配代理类中的所有方法,根据方法执行后的不同连接点去调用相应的通知,如方法执行前调用前置通知
LACP3
你好,你指的是不是moocBefore通知器那段里的pointcut?
pointcut切点决定advice通知作用于哪个连接点,视频里的前通知刚好只有一个,如果那个接口有多个实现类呢,是不是。
海王sk
只有当代理类没有实现任何接口或者proxyTargetClass=true时,才使用CGLIB的方式代理。
另外,别把CGLIB添加到classpath中。
建议你看下配置和需要的实例是否正确。
qq_编辑个性签名_0
一个是xml文件配置<aop:config>来实现aop,一个是通过spring aop api 来实现aop,两种方式。
juaining
ProxyFactoryBean 是最原始的实现Spring AOP配置的方式,使用 ProxyFactoryBean 来创建 AOP 代理的最重要的优点之一是 IoC 可以管理通知和切入点.
稻子凡
默认调用所有方法
攻城狮Flion
http://blog.csdn.net/mafly008/article/details/10618601,自己去好好看一下吧。慢慢去理解,框架是不能急的,先学会去用
慕容4804010
pointcutBean只在defaultAdvisor中被引用,defaultAdvisor中只引用了before,所以区别只在before那里
莨菽菽
完全没有问题啊,你理解错了,匿名内部代理指的是
<bean class=""></bean>
bean标签里没有指定他的id ,所以是匿名的 如果你用ref 里面的bean="",引号里的名字就是bean的名字,所以就不是匿名的,是有名字的。然后你说的那个没经过代理处理那个问题,是你理解错了,他的意思是用ref的方式去调用bean,因为你这个ref方式是在代理类里面的,所以ref调用bean的时候代理类会帮你处理,可是你要是直接在类中去取得这个bean,并不是调用代理类的bean,而是直接去取得,然后使用,他是不会帮你代理处理的,所以那些advice自然就不会使用到。
sd1700092
相关定义可以百度,可以理解为由于Spring可以插入操作(抄作业修改两句就变成自己写的了这种现象),为了保护其他对象(其他人)对目标对象(你)的操作(你作业修改),使用代理(抄到他的作业本上)来代理目标对象(你作业本上的),但是实现的所有事务还是原对象的事务(都写完了作业)
慕粉4207257
spring-aop-api.xml 这个是我在根目录下创建的xml文件,,内容和你的一样
去南极给企鹅洗热水澡
这是动态代理,包括jdk代理和cglib代理
在程序运行的过程中生成要代理对象的代理类
慕粉3917970
说错了
两个bean应该装到<list></list>里
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="bizLogicImplTarget" class="com.learn.aop.api.BizLogicImpl"></bean>
<bean id="bizLogicImpl" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.learn.aop.api.BizLogic</value>
</property>
<property name="target">
<bean class="com.learn.aop.api.BizLogicImpl"></bean>
<ref bean="bizLogicImplTarget"></ref>
</property>
<property name="interceptorNames">
<list>
<value>moocBeforeAdvice</value>
<value>moocAfterReturningAdvice</value>
<value>moocMethodInterceptor</value>
<value>moocThrowsAdvice</value>
<value>mooc*</value>
</list>
</property>
</bean>
</beans>
qq_等某个人等了23年还没等_0
我也遇到和你一样的问题,可能是你的配置文件有问题 :
<bean id="defaultAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="moocBeforeAdvice"/>
<property name="pointcut" ref="pointcutBean"/>
</bean>
这里我加重的是ref属性,不是value属性,我之前写的是value就报错,希望对你有帮助!
java家洼
场景:
你要把一个礼物从上海寄给北京的翠花。
选择:
1、肉身搭飞机去北京送给翠花。
2、寄 X 丰。
结果:
两种选择都可以把礼物送到翠花手上。
你和 X 丰都有送礼物的功能,这叫实现同一接口。
你可以选择任意方式来完成送礼物,这叫客户端使用多态来选择任一对象,具体实现延迟到子类。
X 丰提供包装服务,这是你所不用提供的,也就是这里说的通知 advice,在送你的礼物的前面包装礼物。
X 丰不能告诉翠花这礼物是 X 丰 CEO 送的,必须说是你送的,这叫做代理内部有一个被代理类的实例,该实例就是你。
PS.
这是我看了设计模式的书总结出来的,代理模式。这里的代理意思是 Spring 内部实现了将你的类和切面合在一起当成一个接口类给你项目中其他代码调用,而你原先的业务代码只有一个职责,其余的切面应该完成的职责都被包含在代理类里面了。
梦编猿
慕慕5709873
代理类代理的应该是接口,而不是接口的具体实现类。接口指的是一类的事情,所以代理接口才有意义。比如中介代理的表面上是某个房东,其实是代理出租一类的事情。