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中
spring学习笔记-通过注解将对象注入IOC容器_第1张图片
1.3.引用context名称空间,并在applicationContext中添加自动组件扫描
在类上添加注解之后,我们需要告诉IOC容器哪些类是需要它为我们自动注入的,这时就需要使用context:component-scan标签将需要IOC容器自动扫描的包配置进来


spring学习笔记-通过注解将对象注入IOC容器_第2张图片
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);
      }
}

spring学习笔记-通过注解将对象注入IOC容器_第3张图片

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

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

2.1.bean对象的id默认为类名首字母小写,可以使用@Repository(“newBeanName”)的方式修改bean的id
直接在注解后加@Repository(“newBeanName”)
spring学习笔记-通过注解将对象注入IOC容器_第4张图片
2.2.自动注入的bean对象默认为单例模式,可以使用@Scope(value = “prototype”)修改bean的生成方式
spring学习笔记-通过注解将对象注入IOC容器_第5张图片
当我们希望该对象为多例时可以使用@scope注解将该类声明为多例模式

@Scope(value = "prototype")

在这里插入图片描述
spring学习笔记-通过注解将对象注入IOC容器_第6张图片

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

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


    

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


            

spring学习笔记-通过注解将对象注入IOC容器_第7张图片
assignable: 根据类名排除,在expression中配置需要排除类的全类名后,该类型会排除指定类的注入


            

spring学习笔记-通过注解将对象注入IOC容器_第8张图片
aspectj: 根据aspectj表达式排除
custom: 自定义一个typeFilter
regex: 根据正则排除

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

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

include和exclude的属性值时完全一样的,只是我们在指定引用时,需要先将包扫描的默认引用规则关闭,否则还是会将全部的对象注入进来,因为默认是全部注入
spring学习笔记-通过注解将对象注入IOC容器_第9张图片

你可能感兴趣的:(spring)