java自动配置xml_Spring 自动装配,Java 配置,XML配置、混合使用

一篇 随笔记,无排版。分类于 乱七八糟 名下。来自 《Spring 实战4》的阅读笔记

装配 Bean

装配:创建应用对象之间协作关系的行为。

spring 三种配置方案

自动装配

Java 配置

XML 配置

三种方式 可以混合使用,推荐程度,由上到下 依次降低。

自动装配

自动装配分为:

组件扫面 : 用于 在ApplicationContext 中创建 Bean。

自动装配:满足各个Bean 之间的依赖关系。

代码演示

@Component // 标志 此类 会被 创建为 Bean

public class A implements B{

private String a;

public void showA(){

System.out.println("----->"+a);

}

}

B 是一个 接口,自己 瞎定义的。

@Component 注解: 表明该类为组件类 ,该类 会被声明 为 Bean。

为bean 命名:@Component("a"),指定 bean 的ID 为 a。

配置类:启用组件扫描

@Configuration

@ComponentScan // 启用组件扫描,

public class AConfig{}

@Configuration 注解,用来 表明 此类 为 配置类。

@ComponentScan注解,启动扫面,默认扫描 配置类 所在的包及其子包,扫描那些 被 @Component 修饰的类。

指定需要扫描的包:@ComponentScan("包名"),里面 对应 value 属性。

设置 基础 包:@ComponentScan(basePackages="基础包名"),通过 backPackages 属性。

指定 多个基础包:@ComponentScan(basePackages={"基础包名1", "基础包名2"}),都放到 {} 里。

通过类所在的包,来设置需要扫描的包, 通过basePackageClasses 属性

@ComponentScan(basePackageClasses="{A.class, B.classs}")

XML 中 使用 ComponentScan 的方式。

测试

@ContextConfiguration(classes="AConfig.class")

public class Tets{

@Autowired

private B b;

@Test

public void abc(){

// ........

}

}

@ContextConfiguration 指明 使用 那个配置类 进行 配置

自动 装配

自动装配 主要使用 @Autowired ,来建立 各个 bean 之间的依赖关系。

@Autowired可以用在 任何 方法 上,包括 构造方法,setter 方法,。。。。

@Autowired

public void method(A a){ // 系统 会找到 和 A 对应的 bean 赋值给 a.

}

required 属性设置为 false 时,表明不要求 必须找到匹配的 Bean。

@Autowired(required="false"),找不到 对应 的bean 不会报错。

当找到 多个 匹配的 bean 时,会产生 歧义性。

歧义性 问题 怎么解决 ? 下一篇解决。

Java 配置

通过 专门的配置 来 生成和组织 bean 之间的关系。

创建 配置类

@Configuration

public class Config{

@Bean // 声明 bean

public B newABean(){

return new A();

}

@Bean // 创建 Bean

public C newCBean(){

return new C( newABean() ); // 并把 newABean Bean 注入 里面

}

}

@Configuration 表明这个类 是 配置类,该类应该包含在Spring应用上下文中如何创建 bean 的细节。

@Bean 注解 表明方法 返回一个对象,此对象为要 注册到 ApplicationContext 中的bean,默认ID 为方法名

指定 bean 的名字/ID:@Bean(name="名字") 。使用 name 属性。

默认 bean 都是 单例的

带有 Bean 注解的方法可以采用任何必要的 Java 功能来产生 Bean 实例。

添加了 @Bean 注解的方法 ,spring 会拦截 对它的所有调用,并确保直接返回该方法所创建的Bean,而不是 每次都对其实际的调用。

在Java 配置中 设置Bean 之间依赖 的方式。

一种 : 引用创建 bean 的方法

@Configuration

public class Config{

@Bean // 声明 bean

public B newABean(){

return new A();

}

@Bean // 创建 Bean

public C newCBean(){

return new C( newABean() ); // 并把 newABean Bean 注入 里面

}

}

一种: 参数方式传递

优点: 引用的 bean 不要求 在同一个 配置类中。

@Configuration

public class Config{

@Bean // 声明了 一个bean

public B newABean(){

return new A();

}

// 学习 通过 参数引用 方式建立 依赖

@Bean // 创建 Bean

public C newCBean(B b){// 通过参数方式 引用 其他Bean

return new C(b );

}

}

XML配置

创建一个 XML 文件,根元素 是 。

声明一个Bean

id 用来 指定 Bean 的名字。没有 Id 会 根据 class属性的全限定类名来进行命名。

class 用来指定对应的类,要使用全限定的类名。

构造器注入 初始化 bean

使用 元素 进行构造器注入。

注入 Bean 引用 : 使用 ref 属性

注入字面量值: 使用 value 属性

注入 集合:

List 集合 :对应 java.util.List

Set集合:对应java.util.Set

值1

值2

值3

....

属性注入

使用 元素 进行 属性注入。

注入 bean :

注入 字面量 :

注入 集合:与 构造器 注入 一样

list 集合

set 集合

值1

值2

值3

....

Java 类一个说明

public class A{

// 此地方 使用 属性注入

private String a;

// 构造方法 上 使用时 构造器注入

public A(String a,String b){

}

}

多种配置的混合使用

将 Java 配置 中的多个配置类 组合在一起

@Configuration

@Import(BConfig.class) // 将 BConfig 配置类导入

public class A{

}

@Import 注解 用于 引入其他配置类

引入多个配置类:@Import({BConfig.class, CConfig.class}) 用 {} 括起来,以, 分割。

在 Java 配置中 引用XML 配置

@Configuration

@Import(BConfig.class) // 将 BConfig 配置类导入

@ImportResource("classpath:XXXX.xml") // 导入 根类路径下 的 XXXX.xml 文件

public class A{

}

@ImportResource 注解,用来将 xml 加载 到 JavaConfig 中

XML 文件 导入 另一个 XML文件

元素,用来 导入其他的XML 文件

resource 指定 需要导入 XML 文件的位置。

不能够 导入 Java 配置 类

XML文件 中导入 Java配置

通过 元素 来 导入 Java 配置。

本文地址:https://blog.csdn.net/CrazyIdeas/article/details/107254086

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值