ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
~~~ /** * Copyright 2009-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ibatis.scripting.xmltags; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; import java.util.Map; import ognl.MemberAccess; import org.apache.ibatis.reflection.Reflector; /** * The {@link MemberAccess} class that based on <a href= * 'https://github.com/jkuhnert/ognl/blob/OGNL_3_2_1/src/java/ognl/DefaultMemberAccess.java'>DefaultMemberAccess</a>. * * @author Kazuki Shimizu * @since 3.5.0 * * @see <a href= * 'https://github.com/jkuhnert/ognl/blob/OGNL_3_2_1/src/java/ognl/DefaultMemberAccess.java'>DefaultMemberAccess</a> * @see <a href='https://github.com/jkuhnert/ognl/issues/47'>#47 of ognl</a> */ class OgnlMemberAccess implements MemberAccess { private final boolean canControlMemberAccessible; OgnlMemberAccess() { this.canControlMemberAccessible = Reflector.canControlMemberAccessible(); } @Override public Object setup(Map context, Object target, Member member, String propertyName) { Object result = null; if (isAccessible(context, target, member, propertyName)) { AccessibleObject accessible = (AccessibleObject) member; if (!accessible.isAccessible()) { result = Boolean.FALSE; accessible.setAccessible(true); } } return result; } @Override public void restore(Map context, Object target, Member member, String propertyName, Object state) { // Flipping accessible flag is not thread safe. See #1648 } @Override public boolean isAccessible(Map context, Object target, Member member, String propertyName) { return canControlMemberAccessible; } } ~~~