您的位置:首页 > 编程语言 > Java开发

Spring学习笔记(一)装配

2020-06-28 04:39 447 查看

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装配到需要的地方,程序将会报错,为避免这种情况我们可以指定
@Autowired
required
属性为
false
,即
@Autowired(required=false)
bean歧义性解决

2. 通过Java代码装配
实现以下三步
(1)创建配置类
使用

@Configuration
声明这个是配置类
推荐做法:将不同功能的
JavaConfig
放到不同的类中,如果需要组合使用那么再写相应的配置模块将其组合在一起通过
@import
导入需要的配置类,当然你也可以通过
@ImportResource
导入需要的
XML
配置文件
(2)声明Bean
@Bean
是一个方法级别上的注解,主要用在
@Configuration
注解的类里, 也可以用在
@Component
注解的类里。同时这个
bean
默认id
方法名
,当然你也可以通过
Bean
name
属性指定
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-空间命名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: