- 浏览: 68729 次
- 性别:
- 来自: 杭州
最新评论
-
mengxinyu5490:
谢谢你的文章,这个问题困扰了很长时间了
豆瓣开放平台api的坑 -
alexyu_yxj:
确实一个巨大的坑!我也弄了两个晚上,感谢有你的文章!!
豆瓣开放平台api的坑 -
snowolf:
不错!
Spring笔记(十二)自动代理AspectJ切面
文章列表
一、在不修改目标对象的源代码的情况下,为目标对象增加方法和属性。
二、实现方法
1、我们要将新增加的方法声明放在新的接口中。
public interface IOtherBean {
public void doOther();
}
2、编写引入类,实现拦截器IntroductionInterception和新方法接口。
public class SomeBeanIntroductionInterceptor implements IOtherBean, IntroductionInterceptor {
public void doOther() {
Sy ...
- 2009-03-21 16:37
- 浏览 6317
- 评论(0)
一、spring提供了很多常用的接入点和advisor,两者相对出现。
二、NameMatchMethodPointcutAdvisor-NameMatchMethodPointcut
1、用于匹配方法名,确定切入点。
2、可以自己写一个ClassFilter,注入NameMatchMethodPointcut中。
3、也可以直接将方法名注入到mappedName中。或注入集合mappedNames里。
<bean id="nameMethodAdvisor" class="org.springframework.aop.support.Nam ...
- 2009-03-21 16:25
- 浏览 1343
- 评论(0)
一、Advice:最顶层接口为aop联盟定制
1、Methods Before Advice
a、实现MethodBeforeAdvice接口。
b、在目标方法执行之前被执行。
c、不能阻止目标方法被调用。
d、不能改变目标方法的返回值。
e、例如在进行权限控制时,一般不使用Methods Before Advice,因为即使验证了权限不够,也不能阻止目标方法的执行。
2、After returning Advice
a、实现AfterReturningAdvice接口。
b、在目标方法执行完成后被执行。
c、不能阻止目标 ...
- 2009-03-21 16:19
- 浏览 1498
- 评论(0)
一、目标对象实现代理接口,使用动态代理机制(JDK的proxy)
1、由于JDK的代理方式要求目标对象实现了接口。
2、相关类java.lang.reflect.Proxy、java.lang.reflect.InvocationHandler。
二、若目标对象未实现代理接口,使用动态代理机制(CGLIB项目)
1、CGLIB通过生成目标对象的子类。
三、两种实现的比较
1、CGLIB生成的代理对象运行的快。
2、JDK生成代理所用的时间少。
四、强制代理方式
1、一般情况下Spring会自动分析目标类是否实现了接口,自动选择两种方式。
2、要强制,可以将代理类 ...
- 2009-03-21 15:13
- 浏览 1297
- 评论(0)
一、用代理模式可以实现aop
1、目标对象和代理对象共同实现同一个接口,当用户调用接口时,返回代理类,代理类里先进行交叉业务逻辑,再进行目标对象的业务逻辑。
2、使用JDK中的Proxy类,我们可以只需什么一个切面类,一个目标类,和一个接口,就可以动态得到一个代理类。
public class CustomerServiceImpl implements ICustomerServiceProxy {
public void register() {
System.out.println("注册!");
}
}
目标对象,继承了接口ICust ...
- 2009-03-21 15:04
- 浏览 1561
- 评论(0)
一、概念:
将程序中的交叉业务逻辑(比如安全、日志、事务)封装成切面,然后注入(织入)到目标对象(具体业务逻辑),生成代理对象。
二、aop实现方式:
1、静态织入:在编译阶段通过特殊的编译器来实现。(AspectJ)
2、加载织入:在加载阶段通过ClassLoader类实现。(AspectJ)
3、动态代理:在运行阶段通过动态代理机制生成一个代理对象。(Spring)
三、aop相关概念:
1、Aspect切面:泛指交叉业务逻辑。
2、Advice通知:具体的交叉业务逻辑。
3、Joinpoint连接点:泛指切面可以被织入的位置。
4、Pointcut切 ...
- 2009-03-21 14:50
- 浏览 1220
- 评论(0)
一、自定义事件
1、继承ApplicationEvent。
import org.springframework.context.ApplicationEvent;
public class RegisterEvent extends ApplicationEvent {
public RegisterEvent(Object source) {
super(source);
}
}
二、定义监听器
1、继承ApplicationListener。
import org.springframework.context.ApplicationEvent;
im ...
- 2009-03-21 14:45
- 浏览 4809
- 评论(0)
一、BeanPostProcessors接口
1、用于对Bean的功能进行扩展,对Bean进行修改。
2、在Bean初始化操作之前和之后各调用一次。
二、BeanFactoryPostProcessors接口
1、用于在Bean实例化前,对配置信息进行修改。
三、后处理Bean的使用
1、先实现接口和方法。
2、在配置文件里注册Bean。
3、Spring会在运行时自动发现有后处理并的实现,并在对应时机调用后处理Bean。
四、特殊的后处理Bean实现
1、CustomEditorConfigurer属性编辑器。
a、编写类继承PropertyEdito ...
- 2009-03-21 14:35
- 浏览 1570
- 评论(0)
一、BeanPostProcessors接口
1、用于对Bean的功能进行扩展,对Bean进行修改。
2、在Bean初始化操作之前和之后各调用一次。
二、BeanFactoryPostProcessors接口
1、用于在Bean实例化前,对配置信息进行修改。
三、后处理Bean的使用
1、先实现接口和方法。
2、在配置文件里注册Bean。
3、Spring会在运行时自动发现有后处理并的实现,并在对应时机调用后处理Bean。
四、特殊的后处理Bean实现
1、CustomEditorConfigurer属性编辑器。
a、编写类继承PropertyEdito ...
- 2009-03-21 14:34
- 浏览 1368
- 评论(0)
一、实例化
二、装配(可选)
三、回调(可选)
1、第一个回调接口BeanNameAware,如果一个Bean继承了该接口,Spring会将配置文件里的id通过setBeanName方法传递过来。
2、第二个回调接口BeanFactoryAware,如果一个Bean继承了该接口,Spring会将BeanFactory通过setBeanFactory方法传递过来。
使用例子:
Bean1为single,Bean2为prototype,Bean2为Bean1的属性出现,此时两次getBean获得Bean1后,再调用Bean1的getBean2方法返回的结果是是Bean2的同一 ...
- 2009-03-21 14:24
- 浏览 2838
- 评论(0)
一、通过名字自动装配
1、<bean id=".." class=".." autowire="byName" />
2、Spring会自动根据属性名去容器中寻找bean。
二、通过类型自动装配
1、<bean id=".." class=".." autowire="byType" />
2、Spring会自动根据类型去容器中寻找bean。
3、但多于一个匹配的,就会抛出异常。
三、匹配构造器自动装配
1、<bean id ...
- 2009-03-21 14:01
- 浏览 1442
- 评论(0)
一、Set
1、
<property name="setProperty">
<set>
<value>1</value>
<value>2</value>
<ref>bean</ref>
</set>
</property>
二、List
1、
<property name="listPropert ...
- 2009-03-21 13:57
- 浏览 1398
- 评论(0)