public interface IUserDao {
public void save();
}
@Component
public class UserDao implements IUserDao {
public void save() {
System.out.println("保存成功");
}
}
@Component
public class MyAop {
public void begin(){
System.out.println("开启事务");
}
public void commit(){
System.out.println("提交事物");
}
}
* @author evanyang
*/
public class ProxyFactoryDemo {
private static Object target;
private static MyAop myAop_;
public static Object getProxyInstanceDemo(Object object, MyAop myAop) {
target = object;
myAop_ = myAop;
return Proxy.newProxyInstance(
target.getClass().getClassLoader(), target.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
myAop_.begin();
Object invoke = method.invoke(target, args);
myAop_.commit();
return invoke;
}
}
);
}
}
<!-- 扫描包范围 -->
<context:component-scan base-package="com.evan"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<bean id="userDao_proxy" class="com.evan.aopImplements.ProxyFactoryDemo" factory-method="getProxyInstanceDemo">
<constructor-arg index="0" ref="userDao"></constructor-arg>
<constructor-arg index="1" ref="myAop"></constructor-arg>
</bean>
public class TestDemo {
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");
IUserDao userDao =(IUserDao) app.getBean("userDao_proxy");
userDao.save();
//BeanFactory
//BeanDefinition
DispatcherServlet
}
}