cglib第三方代理
不用接口,直接写类
//拦截对象
public class UserDao {
public void saveUser(){
System.out.println(“saveUser”);
}
public void updateUser(){
System.out.println(“updateUser”);
}
}
//后置增强
public class AfterAdvice implements AfterReturningAdvice {
@Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println(“日志保存”);
}
}
//测试类
public class test {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("springAOP/springAopCglib/bean.xml");
UserDao userDao=context.getBean(“userProxy”,UserDao.class);
userDao.saveUser();
}
}
//增强(拦截所有的强求)
<?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:p="http://www.springframework.org/schema/p"
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd" >
<bean id="userDao" class="springAOP.springAopCglib.UserDao"></bean>
<bean id="after" class="springAOP.springAopCglib.AfterAdvice"></bean>
<!--cglib动态代理-->
<bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean"
p:target-ref="userDao"
p:interceptorNames="after"
p:proxyTargetClass="true"
/>
</beans>
//通知指定函数拦截
<bean id="userDao" class="springAOP.springAopCglib.UserDao"></bean>
<bean id="after" class="springAOP.springAopCglib.AfterAdvice"></bean>
<!--通知-->
<bean id="user" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="after"></property>
<property name="patterns">
<property name="advice" ref="after"></property>
<property name="patterns">
<list>
<value>.*save.*</value>
</list>
</property>
</property>
</bean>
<!--cglib动态代理-->
<bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean"
p:target-ref="userDao"
p:interceptorNames="user"
p:proxyTargetClass="true"
/>