Что такое Java отражение
Бег, динамический доступ ко всей информации, класс
Роль рефлексии
1, декомпилировать: .class -> Java - .
2. объект Java , доступ через отражательные свойства, методы, метод строительства и тому подобное;
Сценарии отражения
драйвер JDBC нагрузки -----
Весна МОК
рамки
Создание Reflection API
Метод имя роль
getDeclaredMethods [] получить все такие методы
getReturnType () Получают возвращаемое значение таких
getParameterTypes () Возвращает параметр передается
getDeclaredFields () Возвращает все поля класса
setAccessible разрешить доступ к закрытым членам
Есть три класса метод отражения Get
//第一种方式:
Classc1 = Class.forName("Employee");
//第二种方式:
//java中每个类型都有class 属性.
Classc2 = Employee.class;
//第三种方式:
//java语言中任何一个java对象都有getClass 方法
Employeee = new Employee();
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
Отражение способ создания объектов
Class<?> forName = Class.forName("com.itmayiedu.entity.User");
// 创建此Class 对象所表示的类的一个新实例 调用了User的无参数构造方法.
Object newInstance = forName.newInstance();
Примеры параметров имеют конструктор
Class<?> forName = Class.forName("com.itmayiedu.entity.User");
Constructor<?> constructor = forName.getConstructor(String.class, String.class);
User newInstance = (User) constructor.newInstance("123", "123");
JDBC загрузки драйвера отражение
общественного класса DemoJDBC {
государственной статической силы основных (String [] арг) бросает исключение {
//加载驱动类
Class.forName ( «com.mysql.jdbc.Driver»);
//通过DriverManager获取数据库连接
Строка URL = «JDBC: MySQL: //192.168.1.150/test»;
Пользователь String = «TeamTalk»;
Строка пароля = «123456»;
Подключение Подключение = (подключение) DriverManager.getConnection (
URL, пользователь, пароль);
PreparedStatement оператор = (PreparedStatement) connection.prepareStatement (
«значение вставки перса (имя, возраст) (,)?»);
statement.setString (1, «HDU»);
statement.setInt (2, 21);
statement.executeUpdate ();
ResultSet Resultset = statement.executeQuery ( «выберите * от перса»);
// установить результат операции Resultset
в то время как (ResultSet.next ()) {
// Получить первое поле режима
System.out.println (resultSet.getString (. 1) + "" +
resultSet.getString (2) + "" + результирующего .getString) (3.);
}
// закрытие соединения
ResultSet.close ();
Statement.close ();
connection.close ();
}
}
Запретите использование отражения Initialize
Конструктор для приватизации
Что такое SpringIOC
Что такое SpringIOC, взаимосвязь между каждым из фасоли (классы сущностей) и бобовые (сущность) к руководству третьей стороны контейнера.
applicationContext.xml
<? XML версия = "1.0" кодирующая = "UTF-8"?>
<bean id="user1" class="entity.User">
<property name="id" value="0002"></property>
<property name="name" value="张三"></property>
<!-- 给list注入值 list 中可以有相当的对象 -->
<property name="item">
<list>
<ref bean="item2" />
</list>
</property>
</bean>
<bean id="user2" class="entity.User">
<property name="id" value="00022"></property>
<property name="name" value="张三2"></property>
<!-- 给list注入值 list 中可以有相当的对象 -->
<property name="item">
<list>
<ref bean="item1" />
</list>
</property>
</bean>
<bean id="item1" class="entity.Item">
<property name="emailAddress" value="[email protected]"></property>
<property name="homeAddress" value="成都"></property>
</bean>
<bean id="item2" class="entity.Item">
<property name="emailAddress" value="[email protected]"></property>
<property name="homeAddress" value="北京"></property>
</bean>
объект
Класс пользователь публичного {
личное строковый идентификатор;
частное имя строки;
частный элемент списка;
Public User () {
супер ();
// TODO Auto-порожденный конструктор окурок
}
Public User (String ID, имя String, Элемент списка) {
супер ();
this.id = ID;
this.name = имя;
this.item = пункт;
}
Строка GetId общественности () {
возвращение идентификатор;
}
Общественного недействительными SETID (String ID) {
this.id = ID;
}
Строка GetName общественности () {
возвращение имя;
}
Общественной недействительная SetName (имя String) {
this.name = имя;
}
Общественного Список GetItem () {
возвращенный деталь;
}
общественного недействительной SetItem (Элемент списка) {
this.item = пункт;
}
@Override
общественного Строка ToString () {
возвращение «Пользователь [ID =» + + идентификатор «имя =» + имя + «пункт =» + пункт + «]»;
}
}
общественный класс Item {
частная строка EMAILADDRESS;
частная строка homeAddress;
Строка общественного getEmailAddress () {
вернуться EMAILADDRESS;
}
Общественного недействительными setEmailAddress (Строка EMAILADDRESS) {
this.emailAddress = EMAILADDRESS;
}
Строка getHomeAddress общественности () {
возвращение homeAddress;
}
Общественного недействительными setHomeAddress (Строка homeAddress) {
this.homeAddress = homeAddress;
}
}
springioc вызов
класс ClassPathXmlApplicationContext общественного {
/ **
* SpringIOC-练习反射
* /
частные статические строки PATH;
частные статические строки ID;
частные статические строки CLASS;
частных статических String Name;
частная статические строки VALUE;
public ClassPathXmlApplicationContext(String PATH) {
init();
this.PATH=PATH;
}
private void init() {
ID="id";
CLASS="class";
NAME="name";
VALUE="value";
}
private Object getBean(String beanId) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException {
//1、解析XML
if(StringUtils.isEmpty(beanId)) {
return null;
}
SAXReader saxReader=new SAXReader();
Document read = saxReader.read(this.getClass().getClassLoader().getResource(PATH));
Element rootElement = read.getRootElement();
@SuppressWarnings("unchecked")
List<Element> elements = rootElement.elements();
for(Element lel:elements) {
String id = lel.attributeValue(ID);
if(beanId.equals(id)) {
continue;
}
//2、使用beanid查找对应的xml节点,获取class节点属性
//获取bean
String attclass = lel.attributeValue(CLASS);
//3、使用java反射机制初始化类
Class<?> forName = Class.forName(attclass);
Object newInstance = forName.newInstance();
//获取属性值
@SuppressWarnings("unchecked")
List<Element> elements2 = lel.elements();
for(Element el:elements2) {
String attField = el.attributeValue(NAME);
String attFieValue = el.attributeValue(VALUE);
Field declaredField = forName.getDeclaredField(attField);
declaredField.setAccessible(true);
declaredField.set(newInstance, attFieValue);
}
return newInstance;
}
return null;
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, DocumentException {
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
User bean = (User) classPathXmlApplicationContext.getBean("item1");
System.out.println(bean.toString());
}
}
SpringIOC принцип лежащий в основе реализации
1. чтение файла конфигурации XML боб
2. beanId найти конфигурацию бина и получить адрес класса файла конфигурации.
Технология отражения объекта Пример 3. Использование Java
конфигурации атрибутов 4. Достаньте, метод присваивания с помощью отражения.
Подробности Шаг
1. Используя параметры , передаваемые в приобретении потока файл XML, и анализируются в объект документа с помощью dom4j
2. После получения корневого элемента объекта при соблюдении следующих условий этикетки траверс документа, определяет , имеется ли соответствующий идентификатор.
3. Если будет установлено соответствующий идентификатор, чтобы найти эквивалентный элемент элемент начинает создавать объекты, чтобы получить атрибут класса, в соответствии с атрибутами , установленного объектом отражения.
4. теги свойства Loop в теге, и стоимость имущества. Обратите внимание , что, чтобы иметь дело отдельно ИНТ, атрибут типа с плавающей точкой. конфигурации XML , поскольку эти атрибуты настраиваются в виде строки, таким образом , требует дополнительной обработки.
5. Если свойство тег имеет атрибут атрибут реф, что указывает на значение свойства объекта, в соответствии с идентификатор (реф значения атрибутов) , чтобы получить объект , соответствующий реф, чтобы дать задание свойств.
6. создается обратный объект, если нет соответствующего удостоверения или без нижестоящего тега будет возвращать нуль
Maven адрес
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.0.0</version>
</dependency>