zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring的自动装配基础详解编程语言

2023-06-13 09:20:44 时间

当开始看别人的代码使用注解的时候,以为照着别人的代码写,也写一个注释就能实现这样的功能,但是,现在开始考虑自动装配时怎样实现的.

首先,如果如果知道如何手动在xml配置中 装配bean ,那么在理解自动装配就比较简单了,如果想直接了解自动装配,那还得从手动装配开始.

XML配置里的bean的自动装配

*Spring IOC 容器可以自动装配Bean,需要做的仅仅是在Bean的autowire属性中指定自动装配的模式

*byType (根据类型自动装配):若IOC容器中有多个与目标Bean类型一致的Bean,Spring将无法判断使用那个Bean,所以不能执行自动装配,且抛出异常

*byName(根据名称自动装配):必须将目标Bean的名称和属性名的设置完全相同.(byName根据bean的名字和当前Bean的setter风格的属性名进行自动装配,若有匹配的的自动装配,若么有匹配的则不装配)

*constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式将会很复杂.不推荐

*一般在实际开发中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力

使用注解的方式

组件扫描,Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件

特定组件包括

@Compontent,基本标示,标示了一个受Spring管理的组件

@Repository,标示持久层组件

@Service,标示服务层(业务层)组件

@controller,标示表现层组件

对于扫描到的组件,Spring有默认的命名策略,使用非限定类名,第一个字母小写,也可以在主键中通过Value属性值组件的名称

当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明 context:component-scan

-base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子类包中的所有类.

-当需要扫描多个包时,可以使用逗号分隔,

-如果仅希望扫描特定的类而非基包下的所有类,可以使用resource-pattern属性过滤特定的类,示例:

 context:component-scan 

base-package="com.study.spring.beans" 

resource-pattern="autowire/*.class"/ 

- context:include-filter 子节点表示药包含的目标类 

- context:exclude-filter 子节点表示药排除在外的目标类 

- context:component-scan 下可以拥有若干个 context:include-filter 和 context:exclude-filter 子节点

 组件装配

context:component-scan 元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,[email protected]@Resource,@inject注解属性

@Autowired注解自动装配具有兼容类型的单个Bean,可以用在构造器,普通字段(即使是非public),[email protected]

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15397.html

cjavaxml