zoukankan      html  css  js  c++  java
  • 私有属性注入

    使用场景实例代码:

    @Service
    public class UserServiceImpl implements UserService {
     
        @Autowired
        private UserDao userDao;
        
        @Override
        public void save(User user){
            ......
            userDao.insert(user);
        }
    	......    
    }
    

    解决方案:

    public class UserServiceTest {
        private UserService userService;
    	@Before
        public void setUp() throws Exception {
        	userService = new UserServiceImpl();
            UserDao userDao = mock(UserDao.class);
      		ReflectionUtils.setFieldValue(userService,"userDao",userDao);
        }   
        @Test
        public void testSave(){
            userService.save(null);
        }
            
    

    工具类:

    /**
      * @description: 反射工具类
      * @author zhu
      */
    public class ReflectionUtils {
        /**
         * 设置属性值
         * @param obj
         * @param fieldName
         * @param value
         * @throws NoSuchFieldException
         * @throws IllegalAccessException
         */
        public static void setFieldValue(Object obj, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException {
            Class<?> clazz = obj.getClass();
            Field field = clazz.getDeclaredField(fieldName);
            field.setAccessible(true);
            field.set(obj, value);
        }
    
        /**
         * 访问私有方法
         * @param obj
         * @param funcName
         * @param parameterTypes
         * @param args
         * @return
         * @throws NoSuchMethodException
         * @throws InvocationTargetException
         * @throws IllegalAccessException
         */
        public static Object invoke(Object obj, String funcName, Class<?>[] parameterTypes, Object... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
            Class<?> clazz = obj.getClass();
            Method insideMethod = clazz.getDeclaredMethod(funcName, parameterTypes);
            insideMethod.setAccessible(true);      
            Object value = insideMethod.invoke(obj, args);
            return value;
        }
    }
    
  • 相关阅读:
    vue封装axios请求
    搭建vue开发环境
    webpack搭建vue环境报错
    JS的执行顺序 setTimeout与Promise async/await
    position属性脱离文档流覆盖其他内容
    MVC和MVT
    HTTP常见请求方式(get,post,put,delete)
    三次握手四次挥手
    web工作流程,中间件,请求顺序
    Vue整理
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11717669.html
Copyright © 2011-2022 走看看