国庆节10月1日
--


Spring框架控制反转(IOC)与依赖注入(DI)的核心概念、注解用法及多种注入方式
控制反转(IOC,Inversion Of Control):对象的创建控制权由程序自身转移到外部(容器),即由Spring IOC容器负责创建和管理对象。
依赖注入(DI,Dependency Injection):容器为应用程序提供运行时所需的资源(对象)。
Bean对象:IOC容器中创建和管理的对象。
使用注解将类交给IOC容器管理:
| 注解 | 说明 | 位置 |
|---|---|---|
@Component | 声明bean的基础注解 | 不属于以下三类时使用 |
@Controller | @Component的衍生注解 | 控制层类 |
@Service | @Component的衍生注解 | 业务层类 |
@Repository | @Component的衍生注解 | 数据访问层类 |
示例:
1@Service2public class UserServiceImpl implements UserService {3 @Autowired4 private UserDao userDao;5 // ...6}7
8@Repository9public class UserDaoImpl implements UserDao {10 // ...11}12
13@RestController14public class UserController {15 @Autowired16 private UserService userService;17 // ...18}@ComponentScan扫描才能生效@SpringBootApplication注解已包含@ComponentScan,默认扫描启动类所在包及其子包方式一:属性注入
1@RestController2public class UserController {3 @Autowired4 private UserService userService;5}方式二:构造函数注入(官方推荐)
1@RestController2public class UserController {3 private final UserService userService;4
5 @Autowired //如果只有一个构造函数,@Autowired可以省略6 public UserController(UserService userService) {7 this.userService = userService;8 }9}@Autowired可省略方式三:setter注入
1@RestController2public class UserController {3 private UserService userService;4
5 @Autowired6 public void setUserService(UserService userService) {7 this.userService = userService;8 }9}当IOC容器中存在多个相同类型的bean时,使用以下方式指定:
| 方案 | 用法 | 说明 |
|---|---|---|
@Primary | 加在实现类上 | 确定默认实现 |
@Qualifier | 配合@Autowired使用 | 按bean名称指定注入 |
@Resource | JDK提供,name属性指定bean名称 | 按名称注入 |
1// 方案一2@Primary3@Service4public class UserServiceImpl implements UserService { }5
6// 方案二7@Qualifier("userServiceImpl")8@Autowired9private UserService userService;10
11// 方案三12@Resource(name = "userServiceImpl")13private UserService userService;无
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


