新建了一个新类(A)后,在类中用注解将属性注入。类名(A)上用 @Component ,类中的一个属性(name)上用 @Autowired或@Resource,
方法(fun)中通过 属性(name)来调用name固有的方法,我调用的时候 是 :
new A().fun();
结果运行报错,报 java.lang.NullPointerException,说 name属性为空。
后面才知道,当使用注解注入之后,重新new的话,注解的功能会失效。
解决方法,调用的时候:
@resourse A a;
a.fun();
经查询发现,spring的创建对象步骤在类加载时就已经通过spring容器创建成功了,用new关键字new出来的对象,jvm会重新分配对应的空间和指针,
这完全就不受spring管理。所以spring管理的任何其它的东西你就拿不到,也就会报NullPointerException错,所以在此时一旦自行New,所有的相应注入
即会失败,在使用时就产生了冲突。
注意,这里并不是说使用了注解以后就不能new,测试结果是,能实例化,并且相应的方法也是可以使用的。但是,实例化后相应Class 相关的注入也
就会集体失效,除非你所有步骤都用new的方式,否则它还是会报错。
至于正确的解决方案,使用了注解,就别使用New, 二者不可兼得。