<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" data-filtered="filtered"></bean>
<!--?xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="https://www.springframework.org/schema/beans" xmlns:context="https://www.springframework.org/schema/context" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-4.3.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd
https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 代理前原对象 -->
<bean class="cn.hncu.xmlImpl.Person" id="person"></bean>
<!-- 切面 = 切点+通知 -->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<!-- 切点 -->
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
<!-- 通知-由我们写,实际代理动作 -->
<property name="advice">
<bean class="cn.hncu.xmlImpl.AroundAdvice" id="advice"></bean>
</property>
</bean>
<!-- 代理工厂 -->
<bean class="org.springframework.aop.framework.ProxyFactoryBean" id="personProxied">
<!-- 放入原型对象 -->
<property name="target" ref="person"></property>
<!-- 放入切面 -->
<property name="interceptorNames">
<list>
<value>advisor</value>
</list>
</property>
</bean>
</beans>
<beans ...="">
<!-- 代理前原对象 -->
<bean class="cn.hncu.xmlImpl.Person" id="person"></bean>
<!-- 切面 = 切点+通知 -->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<!-- 切点 -->
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
<!-- 通知-由我们写,实际代理动作 -->
<property name="advice">
<bean class="cn.hncu.xmlImpl.AroundAdvice" id="advice"></bean>
</property>
</bean>
<!-- 自动代理 -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
</beans>
@Test//自动代理
public void demo4(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/hncu/xmlImpl/4.xml");
//我们直接在这里获取Person对象就可以了,因为在最开始xml文件newPerson对象后,Spring就已经帮我们代理了!
Person p =ctx.getBean(Person.class);
p.run();
p.say();
}
package cn.hncu.xmlImpl;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class MyAutoProxy implements BeanPostProcessor,ApplicationContextAware{
private ApplicationContext applicationContext=null;
//bean创建之前调用
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;//在这里,我们直接放行
}
//bean创建之后调用
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
ProxyFactoryBean factory = new ProxyFactoryBean();
//把原型对象放入代理工厂
factory.setTarget(bean);
//在这里
Advisor adv = applicationContext.getBean(Advisor.class);
factory.addAdvisor(adv);
//返回被代理后的对象
return factory.getObject();
}
//拿到原来的spring中的容器
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext=applicationContext;
}
}
<beans...>
<!-- 代理前原对象 -->
<bean class="cn.hncu.xmlImpl.Person" id="person"></bean>
<!-- 切面 = 切点+通知 -->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<!-- 切点 -->
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
<!-- 通知-由我们写,实际代理动作 -->
<property name="advice">
<bean class="cn.hncu.xmlImpl.AroundAdvice" id="advice"></bean>
</property>
</bean>
<!-- 自己写的自动代理 -->
<bean class="cn.hncu.xmlImpl.MyAutoProxy"></bean>
</beans...>
@Test//自己实现的自动代理
public void demo5(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/hncu/xmlImpl/5.xml");
Person p =ctx.getBean(Person.class);
p.run();
p.say();
}
<!--?xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="https://www.springframework.org/schema/beans" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:context="https://www.springframework.org/schema/context" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-4.3.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd
https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-4.3.xsd
https://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-4.3.xsd ">
<!-- 利用sop标签实现自动代理 -->
</aop:aspectj-autoproxy>
<!-- 代理前原对象 -->
<bean class="cn.hncu.xmlImpl.Person" id="person"></bean>
<!-- 切面 = 切点+通知 -->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<!-- 切点 -->
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
<!-- 通知-由我们写,实际代理动作 -->
<property name="advice">
<bean class="cn.hncu.xmlImpl.AroundAdvice" id="advice"></bean>
</property>
</bean>
</beans>
@Test//自动代理
public void demo6(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/hncu/xmlImpl/6.xml");
Person p =ctx.getBean(Person.class);
p.run();
p.say();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有