spring学习笔记-通过注解将对象注入IOC容器

1.通过注解将对象注入IOC容器

我们可以通过使用以下四个注解的任意一个将类快速注入到IOC容器中,而不必再去applicationContext中进行繁琐的配置:
@controller: org.springframework.stereotype.Controller
控制器,推荐添加在控制类上
@service: org.springframework.stereotype.Service
业务逻辑,推荐添加在业务接口类上
@repository: org.springframework.stereotype.Repository
存储库,推荐添加在对象类上
@component: org.springframework.stereotype.Component;
组件,给不属于以上三类的情况添加

注解是可以随意添加的,spring底层并不会去验证当前类是否与注解的意思一致,但是习惯上我们更推荐以上的分类方式,以便我们的后期维护

1.1.导入spring-aop-4.3.27.RELEASE.jar
注解注入的方式是依赖于spring-aop-4.3.27.RELEASE.jar的,否则会报错

Caused by: java.lang.NoClassDefFoundError: 
org/springframework/aop/TargetSource

1.2.在类中使用以上4个注解中的任意一个将类注入到IOC中
在这里插入图片描述
1.3.引用context名称空间,并在applicationContext中添加自动组件扫描
在类上添加注解之后,我们需要告诉IOC容器哪些类是需要它为我们自动注入的,这时就需要使用context:component-scan标签将需要IOC容器自动扫描的包配置进来

<context:component-scanbase-package="com.hao.spring"></context:component-scan>

在这里插入图片描述
1.4.获取自动注入的bean对象
获取对象时

public class Test {
      public static void main(String[] args) {
            ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

            User user = (User)ac.getBean("user");
            System.out.println(user);
      }
}

在这里插入图片描述

自动注入的bean对象默认id为该类的类名首字母小写

2.使用注解注入对象时的属性配置

2.1.bean对象的id默认为类名首字母小写,可以使用@Repository(“newBeanName”)的方式修改bean的id
直接在注解后加@Repository(“newBeanName”)
在这里插入图片描述
2.2.自动注入的bean对象默认为单例模式,可以使用@Scope(value = “prototype”)修改bean的生成方式
在这里插入图片描述
当我们希望该对象为多例时可以使用@scope注解将该类声明为多例模式

@Scope(value = "prototype")

在这里插入图片描述
在这里插入图片描述

3.指定包扫描的排除规则

我们可以使用context:exclude-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的注入排除

<context:component-scan base- package="com.hao.spring">
    <context:exclude-filter type="annotation" expression=""/>
</context:component-scan>

type包含共包含5个值,其中前两个是比较常用的
annotation: 根据注解排除,在expression中配置该注解的全类名后,该类型会排除标注了配置注解的类

<context:component-scan base-package="com.hao.spring">
            <context:exclude-filter type="annotation"  expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

在这里插入图片描述
assignable: 根据类名排除,在expression中配置需要排除类的全类名后,该类型会排除指定类的注入

<context:component-scan base-package="com.hao.spring">
            <context:exclude-filter type="assignable"  expression="com.hao.spring.user.User"/>
</context:component-scan>

在这里插入图片描述
aspectj: 根据aspectj表达式排除
custom: 自定义一个typeFilter
regex: 根据正则排除

4.指定包扫描的包含规则

我们可以使用context:include-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的指定注入

include和exclude的属性值时完全一样的,只是我们在指定引用时,需要先将包扫描的默认引用规则关闭,否则还是会将全部的对象注入进来,因为默认是全部注入
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值