5. 基于注解使用IoC

一. 使用注解的好处

(1)直接将Bean注册到IoC容器中,无需为Bean编写xml配置文件,提高了开发效率

(2)进行注入依赖时,也无需在Bean类中提供setter方法

二. 使用注解实现IoC的开发步骤

1. 修改spring.xml配置文件—添加context命名空间的声明

使用注解时,需要告诉Spring在创建IoC容器时,把哪些类作为Bean注册到IoC容器中
因此需要配置一个标签进行包扫描,包下的所有类将被自动注册到IoC容器中

该标签没有定义在beans名称空间中,而是在名称为context名称空间中定义的,所以注解配置的第一步是添加context名称空间

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

2. 添加<context:component-scan/>标签配置自动扫描包

<context:component-scan base-package="包名"/>

Spring将会自动扫描base-package属性所指定的包及其子包中的所有类,一旦检测到此类中使用了注解,就自动将此类的对象作为Bean注册到IoC容器中,此方式比在配置文件中编写标签更简单

3. 使用注解将Bean组件自动注册到IoC容器中

(1)老版注解

@Component
在Bean类上标注@Component注解后,Bean组件将自动注册到IoC容器中

@Component(value=“bean在IoC容器中的id”)
如果不指定value属性,则Bean的名称默认为类名的首字母小写形式
如果注解中只包含value属性时,属性名可以省略

@Component
@Component(value="user")
@Component("user")
public class User{...}

【特点】@Component注解在MVC各层中通用,语义不清晰

(2)新版注解

@Controller—表现层专用的注解,表示该Bean是一个控制器对象

@Controller
public class UserController{...}

@Service—业务层专用的注解,表示该Bean是一个业务对象

@Service(value="userService")   
public class UserServiceImpl implements UserService{...}

@Repository—持久层专用的注解,表示该Bean是一个DAO对象

@Repository("userDAO")   
public class UserDAOImpl implements UserDAO{...}

【特点】在MVC各层中使用专用的注解,语义清晰

三. Bean的作用范围

在Bean类上标注@Scope注解

@Scope(value="singleton|prototype")
public class User{...}

四. Bean的生命周期

(1)在初始化方法上标注@PostConstruct注解

@PostConstruct
public void init(){...}

(2)在销毁方法上标注@PreDestroy注解

@PreDestroy
public void destroy(){...}

五. Bean的依赖注入

1. 注入简单类型的数据

(1)在Bean类的属性上标注@Value注解
(2)无需提供属性的setter方法

2. 注入对象类型的数据

(1)在Bean类的属性上标注@AutoWired注解或@Resource注解
(2)无需提供属性的setter方法

【方式1】根据Bean的类型注入

(1)在Bean类的属性上标注@AutoWired注解,该注解在IoC容器中查找指定类型的Bean对象,自动完成依赖关系的注入

(2)@Autowired注解只能按类型匹配Bean,如果IoC容器中有多个类型相同的Bean,则抛出异常

(3)如果存在上述情况,可以配合使用@Qualifier注解,再进一步按名称匹配Bean
默认名称是类名的首字母小写,也可以通过value属性要查找的指定Bean名称
@Qualifier注解不能单独使用,必须配合@Autowired注解一起使用

@Autowired
@Qualifier("userService")
private UserService userService;

【方式2】根据Bean的名称注入

(1)在Bean类的属性上标注@Resource注解,默认在IoC容器中查找名称为类名的首字母小写的Bean,可以使用name属性指定要查找的Bean名称

(2)如果按照名称无法匹配Bean,@Resource注解再按照类型查找,可以使用type属性指定要查找的Bean类型

@Resource(name="userDAO")
private UserDAO userDAO;

@Autowired注解和@Resource注解的区别

【区别1】@Autowired默认按照类型查找Bean,按名称查找时,需要配合@Qualifier注解一起使用
@Resource默认按照名称查找Bean,比较方便

【区别2】@Autowired是Spring框架提供的注解
@Resource是JSR250规范提供的Java注解

JSR—Java Specification Requests—Java规范提案
JSR是指向JCP(JavaCommunity Process)提出新增一个标准化技术规范的正式请求
【参考网址】https://blog.csdn.net/u013182960/article/details/90257159


@Resource的装配顺序 了解

(1)同时指定了name和type属性,则根据名称和类型查找,找不到则抛出异常
(2)只指定了name属性,则根据名称查找,找不到则抛出异常
(3)只指定了type属性,则根据类型查找唯一匹配Bean,找不到或者找到多个都会抛出异常
(4)既没有指定name属性,也没有指定type属性,则先根据名称查找,如果找不到,再根据类型查找,如果还找不到,最终抛出异常

  1. 注入集合类型的参数

对于array,list,set,map,properties等集合类型,元素的数据无法使用注解注入,只能通过XML配置实现

Spring系列学习笔记会每日更新,欢迎大家关注订阅点赞!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值