先給總結,再給實例
前提:
類B里用了@Autowired注解,類A和類B都加了@Component或者其他形式如@Service這樣都注解。
結果:
如果類A 想訪問類B,采用new B()的方式,則在類B里沒法訪問bean對象(也就是加了@Autowired的對象),會報空指針;
如果在類A中注入類B,則在類B里可以訪問注入的bean對象
原因:@Autowired注入即將對象注入到Spring的IOC容器內,而new出來的實例脫離了Spring的管理,兩個對象不在一個管理者管理下,也即無法聯系起來
舉個最簡單的例子:
controller調用service,
@Controller public class TestController { @Autowired TestService testService; @RequestMapping("/hello") public void getTest(){ testService.sayHello(); new TestServiceImpl().sayHello(); } }
@Service public class TestServiceImpl implements TestService { @Autowired ApplicationContext ac; @Override public void sayHello() { System.out.println("----> " + ac); System.out.println("----> " + "hello world"); } }
看結果,一目了然