java反射类中的Spring属性注入无效问题?请大神赐教,感激不尽……

1.通过反射创建一个类的对象,代码如下图所示:

            // 得到对象
            Class clazz = Class.forName("com.xx.xxxx.adm.job.DeptSynchJob");
            Object obj = clazz.newInstance(); // 调用无参构造

2.在类的构造方法中调用一个记录日志的方法:代码如下图所示:

clipboard.png

控制台打印信息如下:

clipboard.png

问题:项目用的框架是spring boot,怎样写才能注入对象?小弟是菜鸟,请大神赐教,感激不尽……

阅读 10.2k
4 个回答

你这么获得一个对象和spring没有半毛钱关系,怎么会给你注入呢?应该使用spring的获取bean的方式呀。

spring是帮助你管理bean,也就是管理synchLogRepoository。你通过反射获得对象,没有经过spring,它也不会给你提供bean实例。需要通过配置或注解来与spring建立bean的管理,才会在你使用bean的时候提供实例。

你需要先在spring配置文件SynchLogRepoository配置好


或者在SynchLogRepoository这个类的上方加上注解,告诉spring这个东西我就交给你管了。类似于:

@Component                 //    或者其他的注解注入
public class SynchLogRepoository {
    //......这是你自己的那个类的内容
}

在这里再多废话几句,springIoCDI,就是在这里体现的。你只有把管理bean的权限从使用它的类中分离出去,才叫做 inverse of control (控制反转)。原来你的活儿,不用你来干,spring集中帮你干了,用的时候,告诉它,它就给你 代码里就是 @Autowired + @Qualifier or @Resource(name="") 来实现。
@Autowired 是用来拿Bean的,不是用来注入的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题