@Test 导包错误
Junit4中的@Test是import org.junit.Test;
Jupiter中的@Test是import org.junit.jupiter.api.Test;
在测试类中@Test导入了Junit.Jupiter.api的Class文件后,我们就不需要再加上@RunWith注解
com/intellij/junit5/JUnit5IdeaTestRunner : Unsupported major.minor version 5
更换jdk版本从7换到8.。
java动态代理
当谈到代理对象的时候,一个简单的例子就是使用静态代理模式来实现对真实对象的访问控制。比如我们有一个简单的接口Image:
public interface Image {
void display();
}
然后我们有一个真实的图片类RealImage:
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk(filename);
}
@Override
public void display() {
System.out.println("Displaying image " + filename);
}
private void loadFromDisk(String filename) {
System.out.println("Loading image from disk: " + filename);
}
}
现在,我们希望在调用display方法前进行权限检查,我们可以创建一个代理类ProxyImage来实现这个功能:
java
public class ProxyImage implements Image {
private RealImage realImage;
private String filename;
public ProxyImage(String filename) {
this.filename = filename;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(filename);
}
// 这里可以加入权限检查等逻辑
realImage.display();
}
}
在这个例子中,ProxyImage充当了RealImage的代理对象,它实现了Image接口,并在调用display方法前进行了权限检查。当调用display方法时,如果realImage对象还未被创建,则先创建RealImage对象,并在权限检查通过后调用realImage的display方法。
这就是一个简单的静态代理的例子,展示了代理对象在Java中的应用。通过代理对象,我们可以在访问真实对象之前或之后执行额外的操作,以实现访问控制、延迟加载等功能。
代理对象通常用于控制对真实对象的访问,并允许在调用真实对象的方法之前或之后执行额外的操作。代理对象与真实对象具有相同的接口,这使得客户端可以使用代理对象来访问真实对象,而不需要知道实际的实现细节。