`
8821249
  • 浏览: 68729 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
一、在不修改目标对象的源代码的情况下,为目标对象增加方法和属性。 二、实现方法   1、我们要将新增加的方法声明放在新的接口中。 public interface IOtherBean { public void doOther(); }   2、编写引入类,实现拦截器IntroductionInterception和新方法接口。 public class SomeBeanIntroductionInterceptor implements IOtherBean, IntroductionInterceptor { public void doOther() { Sy ...
一、spring提供了很多常用的接入点和advisor,两者相对出现。 二、NameMatchMethodPointcutAdvisor-NameMatchMethodPointcut   1、用于匹配方法名,确定切入点。   2、可以自己写一个ClassFilter,注入NameMatchMethodPointcut中。   3、也可以直接将方法名注入到mappedName中。或注入集合mappedNames里。 <bean id="nameMethodAdvisor" class="org.springframework.aop.support.Nam ...
一、Advice:最顶层接口为aop联盟定制   1、Methods Before Advice     a、实现MethodBeforeAdvice接口。     b、在目标方法执行之前被执行。     c、不能阻止目标方法被调用。     d、不能改变目标方法的返回值。     e、例如在进行权限控制时,一般不使用Methods Before Advice,因为即使验证了权限不够,也不能阻止目标方法的执行。   2、After returning Advice     a、实现AfterReturningAdvice接口。     b、在目标方法执行完成后被执行。     c、不能阻止目标 ...
一、目标对象实现代理接口,使用动态代理机制(JDK的proxy)   1、由于JDK的代理方式要求目标对象实现了接口。   2、相关类java.lang.reflect.Proxy、java.lang.reflect.InvocationHandler。 二、若目标对象未实现代理接口,使用动态代理机制(CGLIB项目)   1、CGLIB通过生成目标对象的子类。 三、两种实现的比较   1、CGLIB生成的代理对象运行的快。   2、JDK生成代理所用的时间少。 四、强制代理方式   1、一般情况下Spring会自动分析目标类是否实现了接口,自动选择两种方式。   2、要强制,可以将代理类 ...
一、用代理模式可以实现aop   1、目标对象和代理对象共同实现同一个接口,当用户调用接口时,返回代理类,代理类里先进行交叉业务逻辑,再进行目标对象的业务逻辑。   2、使用JDK中的Proxy类,我们可以只需什么一个切面类,一个目标类,和一个接口,就可以动态得到一个代理类。 public class CustomerServiceImpl implements ICustomerServiceProxy { public void register() { System.out.println("注册!"); } } 目标对象,继承了接口ICust ...
一、概念:     将程序中的交叉业务逻辑(比如安全、日志、事务)封装成切面,然后注入(织入)到目标对象(具体业务逻辑),生成代理对象。 二、aop实现方式:   1、静态织入:在编译阶段通过特殊的编译器来实现。(AspectJ)   2、加载织入:在加载阶段通过ClassLoader类实现。(AspectJ)   3、动态代理:在运行阶段通过动态代理机制生成一个代理对象。(Spring) 三、aop相关概念:   1、Aspect切面:泛指交叉业务逻辑。   2、Advice通知:具体的交叉业务逻辑。   3、Joinpoint连接点:泛指切面可以被织入的位置。   4、Pointcut切 ...
一、自定义事件   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 ...
一、BeanPostProcessors接口   1、用于对Bean的功能进行扩展,对Bean进行修改。   2、在Bean初始化操作之前和之后各调用一次。 二、BeanFactoryPostProcessors接口   1、用于在Bean实例化前,对配置信息进行修改。 三、后处理Bean的使用   1、先实现接口和方法。   2、在配置文件里注册Bean。   3、Spring会在运行时自动发现有后处理并的实现,并在对应时机调用后处理Bean。 四、特殊的后处理Bean实现   1、CustomEditorConfigurer属性编辑器。     a、编写类继承PropertyEdito ...
一、BeanPostProcessors接口   1、用于对Bean的功能进行扩展,对Bean进行修改。   2、在Bean初始化操作之前和之后各调用一次。 二、BeanFactoryPostProcessors接口   1、用于在Bean实例化前,对配置信息进行修改。 三、后处理Bean的使用   1、先实现接口和方法。   2、在配置文件里注册Bean。   3、Spring会在运行时自动发现有后处理并的实现,并在对应时机调用后处理Bean。 四、特殊的后处理Bean实现   1、CustomEditorConfigurer属性编辑器。     a、编写类继承PropertyEdito ...
一、实例化 二、装配(可选) 三、回调(可选)   1、第一个回调接口BeanNameAware,如果一个Bean继承了该接口,Spring会将配置文件里的id通过setBeanName方法传递过来。   2、第二个回调接口BeanFactoryAware,如果一个Bean继承了该接口,Spring会将BeanFactory通过setBeanFactory方法传递过来。     使用例子:     Bean1为single,Bean2为prototype,Bean2为Bean1的属性出现,此时两次getBean获得Bean1后,再调用Bean1的getBean2方法返回的结果是是Bean2的同一 ...
一、通过名字自动装配   1、<bean id=".." class=".." autowire="byName" />   2、Spring会自动根据属性名去容器中寻找bean。 二、通过类型自动装配   1、<bean id=".." class=".." autowire="byType" />   2、Spring会自动根据类型去容器中寻找bean。   3、但多于一个匹配的,就会抛出异常。 三、匹配构造器自动装配   1、<bean id ...
一、Set   1、 <property name="setProperty"> <set> <value>1</value> <value>2</value> <ref>bean</ref> </set> </property> 二、List   1、 <property name="listPropert ...
Global site tag (gtag.js) - Google Analytics