class A{
         private JavaMailSender mailSender;         @Autowired
public void setMailSender(@Qualifier("mailSender")JavaMailSender mailSender) {
this.mailSender = mailSender;
System.out.println("mailSender1:" + mailSender);
}
         public void sendmail(){               System.out.println("mailSender2:" + mailSender);         }         }     class B{
      A a = new A();
      a.sendmail();     }
  为什么
mailSender1: org.springframework.mail.javamail.JavaMailSenderImpl@76e8a7
mailSender2: null啊啊啊啊

解决方案 »

  1.   

    你想问什么?mailSender2为什么为空?setMailSender又不是构造方法,生成A的对象并不会执行setMailSender方法,可能我理解错你的意思了,没看到你调用setMailSender方法,却输出了
    mailSender1: org.springframework.mail.javamail.JavaMailSenderImpl@76e8a7 
      

  2.   

    因为你SET方法里面的mailSender给他设置了值啊!但是你在调用sendmail方法之前你没有给他设置值!sendmail里面访问的是一个没有被赋值的mailSender所以你必须手动调用一下SET方法  
        class B{ 
          A a = new A(); 
          a.setMailSender();
          a.sendmail();     } 
      

  3.   

    因为你测试的时候 为了看SET方法里面的值,你不自觉的调用SET方法
      

  4.   

    既然lz使用@Autowired,那在设置的时候,必然会通过spring框架。
    也就是说,ClassB 在调用 ClassA instance 时,也只有通过spring框架。
    否则,lz需要自己设置mailSender的值。
      

  5.   

     System.out.println("mailSender2:" + mailSender); mailSender这个没有创建