• 私有属性注入


    使用场景实例代码:

    @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;
        }
    }
    
  • 相关阅读:
    JSON
    邮箱正则表达式
    聚聚科技---PHP开发笔试题及答案
    PHP字符串左边补0,字符串右边补0
    CSS3实现带阴影的弹球
    背景颜色渐变
    CSS3---滤镜
    CSS3裁剪与遮罩解析
    CSS3---混合模式
    使用CSS3制作各种形状
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11717669.html
Copyright © 2020-2023  润新知