• jerry guo
    2022-03-20
    这篇太难了 没看懂

    编辑回复: 同学具体哪里没看懂,可否具体?方便小编迭代。

    共 2 条评论
    1
  • 阿璐4r
    2021-12-24
    我一点也不聪明
    共 1 条评论
    23
  • 子房
    2021-05-08
    本质原因是 bean 初始化后被创建为代理 bean ,只有访问代理对象 方法才会被拦截
    
    9
  • 安迪密恩
    2022-03-09
    hi 傅哥, 案例一的解决方案一,需要加@Lazy否则会出现循环依赖。 @Lazy @Autowired private ElectricService electricService;
    共 1 条评论
    5
  • Monday
    2021-06-19
    案例2:user的命名一会user一会adminUser,不统一啊
    共 1 条评论
    4
  • Ball
    2021-04-30
    🤔总结一下,今天以两个 AOP 场景下的问题为线索,深入 Spring 源码探讨了 Spring 的动态代理机制,还分享了 AOP 场景下问题的 debug 技巧。结合问题定位的过程,最终给出了问题的多种解决方案。👍
    
    4
  • Bumblebee
    2022-05-30
    今日收获(总结的不对的希望老师同学们多多指正) ① JDK 动态代理只能对实现了接口的类生成代理,而不能针对普通类。而 CGLIB 是可以针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,来实现代理对象。 ② this调用的当前类方法无法被拦截(可以通过@Autowired、AopContext.currentProxy() 方式解决); ③ 我们一般不能直接从代理类中去拿被代理类的属性,这是因为除非我们显示设置 spring.objenesis.ignore 为 true,否则代理类的属性是不会被 Spring 初始化的,我们可以通过在被代理类中增加一个方法来间接获取其属性。 总结:我觉得SpringAop生成的代理类是对被代理类的一个包装,代理类对象仅被代理对象方法执行前后进行增强,原始方法的调用还是由被代理对象自己执行;
    
    2
  • Geek_930ce1
    2022-06-10
    ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory(); Constructor<AdminUserService> constructor1 = AdminUserService.class.getConstructor(); Constructor constructor2 = reflectionFactory.newConstructorForSerialization(AdminUserService.class,constructor1); AdminUserService adminUserService3 = (AdminUserService)constructor2.newInstance(); System.out.println("sun.reflect.ReflectionFactory.newConstructorForSerialization().newInstance()"+adminUserService3); 经过尝试,还是存在成员变量,是为什么
    共 3 条评论
    1
  • Bo
    2023-03-01 来自广东
    关于思考题,不知道为什么用老师的AdminUserService就还是会初始化类属性,自定义的类就可以验证不会初始化,后面再关注。 验证代码如下:(参考https://blog.csdn.net/Zong_0915/article/details/126512236) public class Test { public final User user = new User("LJJ"); public User user2 = new User("LJJ"); public String name = "Hello"; public final String str = "ssss"; public Integer a = 12222; public final Integer b = 12222; public int aa = 1; public final int bb = 2; public static void main(String[] args) throws Exception { ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory(); Constructor constructor = reflectionFactory.newConstructorForSerialization(Test.class, Object.class.getDeclaredConstructor()); constructor.setAccessible(true); Test t = (Test) constructor.newInstance(); System.out.println("final user: " + t.user); System.out.println("user: " + t.user2); System.out.println("final String: " + t.str); System.out.println("String: " + t.name); System.out.println("final Integer: " + t.b); System.out.println("Integer: " + t.a); System.out.println("final int: " + t.bb); System.out.println("int: " + t.aa); } } 注意: - sun.reflect在Java 9以上才引入 - 如果编译报错“package sun.reflect does not exist”,但是在代码里其实可以看到源码,则可以尝试在IDEA设置里搜索Java Compiler,取消勾选 `Use '--release' option for cross-compilation` 选项即可,亲试有效。参考[IntelliJ says the package does not exist, But I can access the package](https://stackoverflow.com/questions/40448203/intellij-says-the-package-does-not-exist-but-i-can-access-the-package)——StackOverFlow
    展开
    
    
  • 饮水偲源
    2022-09-01 来自北京
    第3种构造方式,成员属性不会初始化的代码 ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory(); Constructor constructor = reflectionFactory.newConstructorForSerialization(AdminUserService.class); AdminUserService adminUserService = (AdminUserService) constructor.newInstance(); System.out.println(adminUserService.adminUser.payNum); 但是 reflectionFactory.newConstructorForSerialization这个方法还有种入参,传入指定构造方法时,其可以完成成员属性初始化。 Constructor<?> newConstructorForSerialization(Class<?> var1, Constructor<?> var2)
    
    