Spring学习笔记(一)装配

10 篇文章 0 订阅

spring配置方式

一、综述

Spring容器负责创建应用程序中的bean并通过DI(依赖注入)来协调他们的关系,那么我们需要去告诉Spring需要创建哪些bean以及如何将其组合到一起(那么bean的装配就可以通俗的理解为依赖关系的注入)。在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配bean。在JavaConfig中,@Configuration加上这个注解的类的作用你可以理解为这个配置类相当于xml文件的作用,@Bean就可以理解为xml中的bean标签

  1. 隐式的bean发现机制(包扫描)和自动装配
  2. 在Java中显式配置
  3. 在XML中显式配置

上述是几种基本的方式,当然我们也可以采用混用不同的配置方式如下:

  1. 在Java中引用xml中配置的Bean
  2. 在XML中引用Java中配置的Bean

二、不同方式装配具体说明

1. 自动化装配
想要实现自动化装配我们可以从两个方向考虑:

  • 组件扫描,Spring自动发现应用上下文中创建的bean
  • 自动装配,Spring自动满足Bean之间的依赖

(1)首先我们需要开启组件扫描(默认不开启
@ComponentScan 注解方式开启
在包扫描的过程中,都是从基础包开始扫描,扫描它下面的所以类

# 我们需要扫描的包和当前类不在一个包里面,需要显示说明基础包
@ComponentScan(basePackages=”类名“)
# 我们如果有多个基础包
@ComponentScan(basePackages={”类名1,”类名2,...})
@ComponentScan(basePackageClasses={类名1.class,类名2.class,...})#建议这种写法

<context:component-Scan base-package="包名"> XML方式开启,当然也可以利用它的子标签实现不扫描哪些包,只扫描哪些包。
(2)其次我们需要让Spring知道哪些需要创建Bean也就是哪些POJO需要添加到容器中,这里我们可以使用@Component注解进行标注。@Component泛指组件。注意:@Component一般用在自动装配,它将这个类对应Spring容器中的一个bean。
(3)如果我们还需要自定义这个组件的id就需要这么写@Component("自定义id"),如果不声明id那就是默认为类名的首字母小写。

(4)为了实现自动装配,满足依赖关系,我们需要借助@Autowired注解,如果不存在匹配的bean装配到需要的地方,程序将会报错,为避免这种情况我们可以指定@Autowiredrequired属性为false,即@Autowired(required=false) bean歧义性解决

2. 通过Java代码装配
实现以下三步
(1)创建配置类
使用@Configuration声明这个是配置类
推荐做法:将不同功能的JavaConfig放到不同的类中,如果需要组合使用那么再写相应的配置模块将其组合在一起通过@import导入需要的配置类,当然你也可以通过@ImportResource导入需要的XML配置文件
(2)声明Bean
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里, 也可以用在@Component注解的类里。同时这个bean默认id方法名,当然你也可以通过Beanname属性指定id,就像这样@Bean(name='自定义id')
可以看这篇文章了解更多Bean的相关
官方文档中文版
(3)实现注入,解决依赖
@Bean带注释的方法可以有任意数量的参数来描述创建这个bean所需的依赖关系。就像下面这样

@Configuration
public class AppConfig {
//将需要依赖的项作为参数传入
    @Bean
    public TransferService transferService(AccountRepository accountRepository) {
        return new TransferServiceImpl(accountRepository);
    }
}

3. 通过XML配置文件装配
(1)通过无参构造器装配

<bean id="自定义id可以不写默认有,但最好自己写" class="全限定的类名"></bean>

(2)通过有参构造器装配

<bean id=""  class="">
  <constructor-arg></constructor-arg>
  <constructor-arg>
  	<set>
  		<value></value>
  		<ref></ref>
  	</set>
  </constructor-arg>
</bean>
  • 通过<constructor-arg> 子元素传入需要的参数,如果是引用则用到ref属性,如果是字面量则用到value属性.
  • spring3.0以后也可以采用c-空间命名,但是它不能传入集合类的参数,而<constructor-arg> 可以。但我们也可使用到util-空间命名,解决属性为集合的问题
    (3)属性设置
    属性设置规则:强依赖使用构造器注入,弱依赖使用属性注入。
    这里需要用到<property>子元素,当然你也可以采用P-空间命名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值