一篇 随笔记,无排版。分类于 乱七八糟 名下。来自 《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
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!