1.dao和实现类
package com.apesblog.dao;
public interface UserDao {
    int add(int a,int b);
    int multiply(int a,int b);
}
package com.apesblog.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public int multiply(int a, int b) {
        return a * b;
    }
    @Override
    public int add(int a, int b) {
        return a + b;
    }
}
2.MyInvocationHandler
package com.apesblog.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@Component
public class MyInvocationHandler implements InvocationHandler {
    @Autowired
    UserDao userDao;
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("----------");
        Object invoke = method.invoke(userDao, args);
        System.out.println(invoke);
        System.out.println("----------");
        return invoke;
    }
}
3.@Configuration或者xml
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"com.apesblog"})
public class SpringConfig {
}
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.apesblog"></context:component-scan>
</beans>
4.测试类
import com.apesblog.dao.MyInvocationHandler;
import com.apesblog.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.lang.reflect.Proxy;
public class Test1 {
    public static void main(String[] args) {
        //xml
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        //全注解
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        MyInvocationHandler myInvocationHandler = (MyInvocationHandler) applicationContext.getBean("myInvocationHandler");
        Class[] interfaces = {UserDao.class};
        UserDao o = (UserDao) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), interfaces, myInvocationHandler);
        o.add(1, 2);
        o.multiply(1, 2);
    }
}
                 
              
评论区