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;
        }
    }
    
  • 相关阅读:
    作业八
    作业七:用户体验设计案例分析
    作业六。合作编程
    作业五:需求分析
    作业四:结对编程2
    作业四:合作
    作业三:词频统计
    学习进度表
    java程序练习
    简单博客练习
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11717669.html
Copyright © 2011-2022 走看看