基于@Autowired实现自动装配
2020.01.24 13:58
2020.01.25 18:54
1. 基于注解实现自动装配
之前我们基于xml时,要实现自动装配需要怎么做?加上AutoWired属性。
现在呢?我们使用@AutoWired注解即可。
2. @AutoWired
步骤1:我们首先新建3个类:BookController、BookService和BookDao
BookDao
package com.misiai.dao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@Repository("Misiai")
@Scope(value = "prototype")
public class BookDao {
public BookDao() {
System.out.println("BookDao 的无参构造!");
}
public void save() {
System.out.println("BookDao的save方法");
}
}
BookController
package com.misiai.controller;
import com.misiai.service.BookService;
import org.springframework.stereotype.Controller;
@Controller
public class BookController {
private BookService bookService;
public void getBook() {
bookService.save();
}
}
BookService
package com.misiai.service;
import com.misiai.dao.BookDao;
import org.springframework.stereotype.Service;
@Service
public class BookService {
private BookDao bookDao;
public BookService() {
System.out.println("BooKService无参构造!");
}
public void save() {
System.out.println("BookService的save方法被调用 >>> 正在调用BookDao的save方法");
bookDao.save();
}
}
步骤2:
如果上面的代码完了,我们直接测试的话:
@Test
public void test02() {
BookController bookController = ap.getBean("bookController", BookController.class);
bookController.getBook();
}
结果:
毫无意外的会报空指针异常,因为全程我们都没有new一个对象,报错是必然的,那么怎么做?
给每一个需要new的变量加@AutoWired注解【前提是该变量的这个类型已经被spring管理了,即加到spring容器中了】
// ====>>>> BookService
@AutoWired
private BookDao bookDao;
// ====>>>> BookController
@AutoWired
private BookService bookService;
成功,全程我们没new一个对象,全交给容器管理!
Tips:
1、这就是spring的最最核心的地方,IOC(容器)和 DI (依赖注入)的配合使用! 我们学习spring,一定要明白IOC和AOP的作用,并合理使用它们!
2、注解方法和之前的基于xml配置的bean,并没有太大区别,所以之前遇到的问题,这里依然会有:bean的单、多实例问题;通过类型获取的bean,如果有同类型的多个实例在容器中,该如何办?这就是我们接下来该解决的!
本节阅读完毕!
(分享)