基于注解配置IoC容器

基于注解配置IoC容器

基于注解的优势

  • 摆脱繁琐的XML形式的bean与依赖注入配置
  • 基于“声明式”的原则,更适合轻量级的现代企业应用
  • 让代码可读性变得更好,让研发人员拥有更好的开发体验

三类注解

  • 组件类型注解-声明当前类的功能与职责
  • 自动装配注解-根据属性特征自动注入对象
  • 元数据注解-更细化的辅助IoC容器管理对象的 注解

组件类型注解:

四种组件类型注解
注解说明
@Component组件注解,通用注解,被该注解描述的类将被IoC容器管理并实例化
@ControllerxA语义注解,说明当前类是MVC应用中的控制器类
@Service语义注解,说明当前类是Service业务服务类
@Repository语义注解,说明当前类用于业务持久层,通常描述对应Dao类
开启组件扫描:
<!--XML配置开启组件扫描,才能使用注解-->
<context:component-scan base-package="com.imooc">
    <context:exclude-filter type="regex" expression="com.imooc.exl.*">
    </context:exclude-filter>
</context:component-scan>
基于注解初始化IoC容器

​ applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
     <!--在IoC容器初始化时自动扫描四种组件类型注解并完成实例化
          @Repository
          @Service
          @Controller
          @Component
     -->
     <context:component-scan base-package="com.imooc"/>
</beans>

自动装配注解:

两类自动装配注解:
分类注解说明
按类型装配@Autowired按容器内对象类型动态注入属性,由Spring机构提供
@Inject基于JSR-330(Dependency Injection for Java)标准,其他同@Autowired,但不支持request属性
按名称装配@Named与@Inject配合使用,JSR-330规范,按属性名自动装配属性
@Resource基于JSR-250规范,优先按名称,再按类型智能匹配
Autowired:

pring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行赋值, 不再执行set方法。如果装配注解放在set方法上,则自动按类型/名称对set方法参数进行注入

Resource:
  1. @Resource设置name属性,则按照name在IoC容器中将bean注入
  2. @Resource未设置name属性
2.1 以属性名作为bean name在IoC容器中匹配bean,如有匹配注入
2.2 按属性名未匹配,则按类型进行匹配,同autowired,需加入@Primary解决冲突
使用建议:在使用@Resource对象时,推荐设置name或保证属性名与bean名称一致

元数据注解

注解说明
@Primary按类型装配时出现多个相同类型对象,拥有此注解对象优先被注入
@PostConstruct描述方法,相当于XML中init-method配置的注解版本
@PreDestory描述方法,相当于XML中destroy-method配置的注解版本
@Scope设置对象的scope属性
@Value为属性注入静态数据
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rex·Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值