一,反射概念
(1)Java反射机制是指在程序运行时,通过提前获取类的信息,动态地操作类和对象的机制。它可以在运行时动态地生成一个类的对象、访问一个对象的属性和方法、调用一个对象的方法等,从而使得程序具有更高的灵活性和可扩展性。Java反射机制的核心是通过Class对象获取和操作目标类的属性、方法、构造函数等信息,从而达到动态使用目标类的效果。但是,Java反射机制的使用也需要谨慎,因为反射机制存在一定的性能问题,并且可能会破坏程序的封装性,使得程序变得难以维护。
(2)
Java中反射机制是指在程序运行时,通过提前获取类的信息,动态地操作类和对象的机制。主要有以下三个关键类:Class类、Constructor类、Method类。其中:
1. Class类:表示类类型的类,提供了获取类信息的方法,如获取类名、获取方法等。
2. Constructor类:表示类的构造方法,提供了实例化类的方法,如获取构造方法、创建实例等。
3. Method类:表示类的方法,提供了调用方法的方法,如获取方法、执行方法等。
反射机制的主要作用有:动态地创建对象,动态地获取类信息,动态地调用方法等。但是,由于反射机制在运行时动态地操作对象,所以会带来一定的性能损耗,同时也容易破坏程序的封装性,所以在使用反射机制时需要慎重考虑。
![](https://img-blog.csdnimg.cn/img_convert/b4a5dda60da5894c180a0b8bc5e1ac75.png)
创建BookServiceimpl类和成员变量,构造方法,成员方法
package com.xue.service.impl;
import com.xue.dao.BookDao;
import com.xue.dao.impl.BookDaoimpl;
import com.xue.service.BookService;
public class BookServiceimpl implements BookService {
//类的属性
public String name;
int age;
protected String sex;
private String address;
public BookServiceimpl() {
}
public BookServiceimpl(String name) {
this.name = name;
}
//类的构造方法
public BookServiceimpl(String name, int age, String sex, String address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
BookDao bookDao = new BookDaoimpl();
@Override
public void add() {
bookDao.add();
}
}
测试方法
package com.xue.test;
import com.xue.service.impl.BookServiceimpl;
import java.lang.reflect.Field;
public class test01 {
public static void main(String[] args) throws Exception {
//全类名加载class对象
Class cla = Class.forName("com.xue.service.impl.BookServiceimpl");
//class对象去做类的手术刀,解刨类里边的东西
//获取类里边public修饰公共的属性
Field[] fields = cla.getFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("-----获取全部内容---------还是单独可以获取到的公共内容------");
//获取类的所有方法和属性
Field[] fields1 = cla.getDeclaredFields();
for (Field field : fields1) {
System.out.println(field);
}
BookServiceimpl b1 = new BookServiceimpl();
//根据name获取公共的成员方法
Field name = cla.getDeclaredField("name");
System.out.println(name);
//根据age获取成员方法(可以获取到被所有修饰符修饰的成员变量)
Field age = cla.getDeclaredField("age");
System.out.println(age);
}
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/a39738c74af07e285c42bd00ca3a4fbe.png)
使用.properties配置对应方法
(1)创建info.properties文件
![](https://img-blog.csdnimg.cn/img_convert/02074bd9a3d64556ddc351ce985bec2d.png)
className=com.xue.service.impl.BookServiceimpl
(2)创建测试类
package com.xue.test;
import com.xue.service.BookService;
import com.xue.service.impl.BookServiceimpl;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.util.Properties;
public class Test02 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\AXKaiYuanRuanJian\\1\\Spring\\Spring01\\src\\info.properties");
InputStream stream = new FileInputStream(file);
Properties p = new Properties();
p.load(stream);
String className = p.getProperty("className");
System.out.println(className);
//1.通过全类名获取类的class对象
Class cla = Class.forName("com.xue.service.impl.BookServiceimpl");
//2.通过class对象获取类的构造器
Constructor constructor = cla.getConstructor();
// System.out.println(constructor);
// Constructor constructor1 = cla.getConstructor();
// System.out.println(constructor1);
// Constructor constructor2 = cla.getConstructor(String.class, int.class,String.class,String.class);
// System.out.println(constructor2);
//3.使用构造器创建对象
BookService bookService = (BookService) constructor.newInstance();
//4.使用对象调用方法
bookService.add();
System.out.println("====================================");
BookService bookService1 = new BookServiceimpl();
bookService1.add();
}
}
![](https://img-blog.csdnimg.cn/img_convert/e40b4e9edab8f4de440b8250ea75ce28.png)