首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从侦听器内部访问外部类?

从侦听器内部访问外部类,可以通过在侦听器内部定义一个内部类,然后通过内部类访问外部类的属性或方法。这种方法可以让我们在 Spring Boot 中实现跨域访问,并且不会影响外部类的加载。

以下是一个示例:

  1. 首先,定义一个外部类,例如 ExternalClass:package com.example.demo; public class ExternalClass { public String getName() { return "Hello, world!"; } }package com.example.demo; public class InternalClass { private ExternalClass externalClass = new ExternalClass(); public String getName() { return externalClass.getName(); } }package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Component public static class InternalClassListener { @Autowired private InternalClass internalClass; public String getName() { return internalClass.getName(); } } }在上述示例中,我们在 Spring Boot 启动类中注册了一个名为 InternalClassListener 的监听器,它会自动获取并调用 InternalClass 类中的 getName() 方法。
  2. 然后,在同一个包下,定义一个内部类,例如 InternalClass
  3. 最后,在 Spring Boot 的启动类中,通过 @SpringBootApplication 注解开启 Spring Boot 的自动装配功能,并将 InternalClass 组件注册到容器中:
  4. 启动 Spring Boot 应用,并访问 InternalClassListenergetName() 方法,即可看到外部类的 getName() 方法被正确调用:http://localhost:8080/name在上述示例中,访问 http://localhost:8080/name 将输出 Hello, world!,表明从侦听器内部访问外部类的方法被正确调用。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java内部类 访问final变量----局部内部类访问局部变量

局部内部类与其他类相比,还有一个优点就是: 它不仅能够访问包含它们的外部类的数据和方法,还可以访问定义它的块的局部变量, 但是有个前提条件:这些局部变量必须被声明为final 知识回忆...start(){ final int localvariable=5; class A{ public void print(){ System.out.println("我是内部类...a = new A(); a.print(); } public static void findInnerClass(){ System.out.println("对不起,我不能直接访问内部类...根据final的知识我们知道final int localvariable = 5;是永远不变的, 这就麻烦了,如果我想要它去统计我们的内部类被执行了多少次该怎么办呢?...或者我想要这个变量在内部类中被多次的修改怎么办呢? 有没有补救的办法呢?

1.1K10

没有任何类型 Windows 的外层实例可访问---Java内部类类型

Java内部类与外部类 错误提示: 没有任何类型 TestThread 的外层实例可访问。...同时外部类访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。       要注意的是,成员内部类不能含有static的变量和方法。...Auto-generated method stub              }          }.start();      }  });        匿名内部类是不能加访问修饰符的...当外部类传的参数被内部类调用时,java程序的角度来看是直接的调用例如:   public void dosome(final String a,final int b){     class...这样理解就很容易得出为什么要用final了,因为两者外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为编程人员的角度来看他们是同一个东西

1.5K80

没有任何类型 Windows 的外层实例可访问---Java内部类类型

Java内部类与外部类 错误提示: 没有任何类型 TestThread 的外层实例可访问。...同时外部类访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。       要注意的是,成员内部类不能含有static的变量和方法。...TODO Auto-generated method stub              }            }.start();      }  });        匿名内部类是不能加访问修饰符的...当外部类传的参数被内部类调用时,java程序的角度来看是直接的调用例如:   public void dosome(final String a,final int b){     class Dosome...这样理解就很容易得出为什么要用final了,因为两者外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为编程人员的角度来看他们是同一个东西

1.1K20

内部类只能访问final的局部变量_java内部类引用外部变量

因为在JDK8之前,如果我们在匿名内部类中需要访问局部变量,那么这个局部变量必须用final修饰符修饰。这里所说的匿名内部类指的是在外部类的成员方法中定义的内部类。...既然是在方法中创建的内部类,必然会在某些业务逻辑中出现访问这个方法的局部变量的需求。那么我们下面就会研究这种情况。 为什么java语法要求我们需要用final修饰呢?...this.val$str = paramString; } public void run() { System.out.println(this.val$str); } } 也就是说匿名内部类之所以可以访问局部变量...---- 介绍到这里,关于为什么匿名内部类访问局部变量需要加final修饰符的原理基本讲完了。那现在我们来谈一谈JDK8对这一问题的新的知识点。...在JDK8中如果我们在匿名内部类中需要访问局部变量,那么这个局部变量不需要用final修饰符修饰。看似是一种编译机制的改变,实际上就是一个语法糖(底层还是帮你加了final)。

91420

灵魂拷问:Java内部类是如何访问部类私有对象的?

可以看出会生成两个.class字节码文件,内部类的类名是外部类类名$内部类类名 然后对这个两个字节码文件反编译看看javap ?...编译器小哥偷偷的做了一些不可告人的事情,首先,内部类中多了个常量引用,准备指向着外部类,而且又偷偷修改了构造方法。传递一个OutClass类型的参数进去。这样内部类就拿到了外部类的引用。...这个时候我做了个方法的测试呀,我们都知道,内部类使用外部类的属性用过外部类类名.this.属性名,所以我写了个测试方法fun public void fun(){ System.out.println...不过对于这点我还有点要说明,编译器很智能,它会扫描内部类,查看是否调用的外部类的私有属性,只有调用了才会生成对应的acess$xxx方法!...结论 在虚拟机中没有外部类内部类之分都是普通的类,但是编译器会偷偷的做点修改,让内部类中多一个常量引用指向外部类,自动修改内部类构造器,初始化这个常量引用,而外部类通过扫描内部类调用了外部类的那些私有属性

2.5K10

字节码深刻理解内部类

匿名类的客户端除了它的超类型中继承得到之外,无法调用任何成员。 匿名类的常用用法 可以出现在表达式当中,但是必须保持简短。...对于内部类访问部类的属性: 静态变量 实例变量 不同在于:访问实例变量的时候需要通过外部类的对象来进行访问 那怎么去调用呢?...静态内部类好处 延迟加载,当真正调用静态内部类时才会去加载。 可以访问部类的私有变量。 可以作为辅助类,但其实可以把它当成一个普通的类来看。...在构造普通内部类的对象时,默认先 new 出一个外部类的对象,然后在调用内部类构造器时通过参数传入普通内部类,这样的话普通内部类就可以通过外部类的对象来访问部类的成员变量。...都会自动生成一个 access 访问方法供内部类进行访问

88520

打好Java基础,使用内部类开始!

这也是内部类的区别之一,如果要在外部类的非静态方法之外获取某个内部类的对象,需要「具体指明这个对象的类型」:OuterClassName.InnerClassName 二、内外相连 内部类存在于外部类里层...,因此也具有一定特权:内部类可以访问外围对象的所有成员,不需要任何特殊条件,此外,内部类还拥有外部类的所有元素的访问权。...我们上面看到的内部类都是定义在外部类中,这也是内部类的典型用处。...普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象,然而,当内部类是static的时候,就意味着: 要创建嵌套类的对象,并不需要其外围类的对象 不能从嵌套类的对象中访问非静态的外围类对象 public...七、继承内部类 内部类作为一种类,被继承当然也是被允许的。

28330

C++入门到精通——内部类和匿名类

一、内部类的概念 ps:可以安装友元类的定义来理解C++入门到精通——友元 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。...内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类内部类没有任何优越的访问权限。但是它可以访问部类的私有成员,因为它被视为外部类的成员。...内部类可以有自己的成员变量和成员函数,外部类可以使用内部类的对象访问内部类的成员。内部类的对象必须由外部类的对象来创建。...注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问部类中的所有成员。但是外部类不是内部类的友元。...内部类InnerClass可以访问部类的私有成员。

16610

「JAVA」语法到案例,定义到使用,详细解释Java 内部类的完全实现

内部类可以直接访问部类的成员。...实例内部类的实例自动持有外部类的实例的引用,所以内部类可以直接访问部类成员; 3. 外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问; 4....如果实例内部类和外部类存在同名的字段或方法abc,那么在内部类中: this.abc:表示访问内部类成员; 外部类.this.abc:表示访问部类成员; 实例内部类代码案例如下: public class...静态内部类可以直接访问部类的静态成员,如果要访问部类的实例成员,还是必须通过外部类的实例去访问。 3. 在静态内部类中可以同时定义静态成员和实例成员。 4....外部类可以通过完整的类名直接访问静态内部类的静态成员。

73850

反编译深入理解JAVA内部类类结构以及final关键字

参考链接: Java本地内部类 1.为什么成员内部类可以无条件访问部类的成员?     在此之前,我们已经讨论过了成员内部类可以无条件访问部类的成员,那具体究竟是如何实现的呢?...,编译器还是会默认添加一个参数,该参数的类型为指向外部类对象的一个引用,所以成员内部类中的Outter this&0 指针便指向了外部类对象,因此可以在成员内部类中随意访问部类的成员。...从这里也间接说明了成员内部类是依赖于外部类的,如果没有创建外部类的对象,则无法对Outter this&0引用进行初始化赋值,也就无法创建成员内部类的对象了。...2.为什么局部内部类和匿名内部类只能访问局部final变量?       ...3.静态内部类有特殊的地方吗?      从前面可以知道,静态内部类是不依赖于外部类的,也就说可以在不创建外部类对象的情况下创建内部类的对象。

52900

开发时遇到监听的事件处理机制和SoundPool播放音效解决方法以及外部类的使用【Android】

监听的事件处理机制 事件侦听器机制是一种委托的事件处理机制。事件源(组件)事件处理被委托给事件侦听器。...处理流程如下:步骤1:为事件源(组件)设置侦听器以侦听用户操作步骤2:用户操作触发事件源的侦听器步骤3:生成相应的事件对象步骤4:将此事件源对象作为参数传递给事件侦听器步骤5:事件侦听器判断事件对象,执行相应的事件处理程序...(相应事件的处理方法) 外部类 它是创建另一个Java文件来处理事件。...因为外部类不能直接访问用户接口类中的组件,所以应该通过构造方法传入组件以供使用;结果是代码不够简洁!...我不知道 AssetFileDescriptor:资产目录中读取资源文件。

1.5K10

并发编程中的逃离“996icu”——this引用逃逸

id = 1; source.registerListener(new EventListener() { //内部类是可以直接访问部类的成员变量的...简单来说,就是在一个类的构造器创建了一个内部类内部类本身是拥有对外部类的所有成员的访问权的),此时外部类的成员变量还没初始化完成。...但是,同时这个内部类被其他线程获取到,并且调用了内部类可以访问到外部类还没来得及初始化的成员变量的方法。...(2)在构造器中内部类使用外部类情况:内部类访问部类是没有任何条件的,也不要任何代价,也就造成了当外部类还未初始化完成的时候,内部类就尝试获取为初始化完成的变量。 那么,如何避免this逃逸呢?...也就是说,如果要在构造函数中创建内部类,那么就不能在构造函数中把他发布了,应该在构造函数发布,即等构造函数执行完初始化工作,再发布内部类

1.3K20

C++ 程序员的 Java 指南

private 只能在同一个类中访问,default 能在同一个类、同一个包中访问,protected 能在同一个类、同一个包、子类中访问,public 能在全局范围内访问。...内部类里引用外部类的属性或者方法时,可以用命 OuterClass.this.。 非静态内部类里不能有静态成员。 内部类可以使用 static 修饰,外部类不行。...部类创建内部非静态类的语法:OuterClass.InnerClass varName = OuterInstance.new InnerConstructor(); 部类创建内部静态类的语法...:OuterClass.InnerClass varName = new OuterClass.InnerConstructor(); 内部类不可能被外部类的子类中重写,因为命名空间不同。...纠误一处:《疯狂 Java 讲义》P214 讲道「如果匿名内部类需要访问部类的局部变量,则必须使用 final 修饰符来修饰外部类的局部变量,否则系统将报错。

42330
领券