Spring IOC 杂文

一、Spring IOC

1. 简介

Spring IoC容器是一个管理(发布和获取)Bean的容器,所有的 IOC容器都需要实现接口BeaFactory, ,默认的情况下, Bean 都是以单例存在的,也就是使用getBean 方法返回的都是同一个对象,当然,这里的情况prototype类型的bean除外

2. 常用注解

@Configuration 代表这是一个 Java 配置文件
@Bean(name =”user” } 代表将 POJO 装配到 IoC 容器中
@Component 是标明哪个类被扫描进入 Spring IoC 容器
@ComponentScan 是标明采用何种策略去扫描装配 Bean
@Component 表明这个类将被 Spring IoC 容器扫描装配
@Service
@Repository
@Value 是指定具体的值
@Conditional

3. @Autowired、 @Primary 和@Quelifier

@Autowired

  1. 首先它会根据类型找到对应的 Bean,如果对应类型的 Bean 不是唯 的,那么它会根据其属性名称和 Bean 的名称进行匹配
  2. 它除了可以标注属性外,还可以标注方法
  3. @Autowired(required = false )

@Primary
修改优先权的注解,当发现有多个同样类型的 Bean 时\ 请优先使用
我进行注入

@Quelifier
它将与@autowired 组合在 起,通过类型和名称一起找到 Bean

4. 带有参数的构造方法类的装配


public Constructor (@ Autowired @Qualifier( "dog”) Animal animall) {
	this.animal = animal ; 
}

5. 生命周期

Spring loC 容器初始化和销毁Bean 的过程, 大致分为 Bean 定义、Bean 的初始化、 Bean生存期和 Bean 的销毁

在这里插入图片描述
完成了第三步只是一个资源定位并将 Bean 的定义发布到 IoC 容器的过程,还没有 Bean 实例的生成,更没有完成依赖注入。在默认的情况下, spring 会继续去完成 Bea 实例化和依赖注入,这
样从 IoC 容器中就可以得到一个依赖注入完成的 Bean。 但是,有时候这些 Bean 会受到变化因素的影响,这时我们倒希望是取出 Bean 的时候完成初始化和依赖注入,换句话说就是让那些 Bean 只是将定义发布到 IoC 容器而不做实例化和依赖注入, 当我们取出来的时候才做初始化和依赖注入等操作

@ComponentScan (basePackages="com.xxx.xxx.*", lazyinit = true) 

Sprin 在完成依赖注入后,还会进行如图 3-5所示流程来完成它的生命周期
在这里插入图片描述

@Component
public class BussinessPerson implements Person, BeanNameAware ,
BeanFactoryAware , ApplicationContextAware, InitializingBean, DisposableBean {

}

Spring IoC 容器最低的要求是实 BeanFactory接口,而不是
ApplicationContext 接口 对于那些没有实现 ApplicationContext 接口的容器 ,在生命周期对应的 ApplicationContextAware 定义的方法也是不会被调用的,

@PostConstruct 自定义初始化方法与 @PreDestroy 自定义销毁方法

6. 使用属性文件

@ConfigurationProperties(“database”)
@ProperSource 去定义对应的属性文件,把它加载到 Spring 的上下文中

//ignoreResourceNotFound 是否忽略配置文件找不到的问题
@PropertySource(value={"classpath : jclbc. properties ", ignoreResourceNotFound=true)

7. Bean 的作用域

在这里插入图片描述

8. 使用@Profile(“test”)

spring.profi es.active 优先级大于 spring profiles.default

9. 引人 XML 配置 Bean

@ImportResource (value = {"com.xxx.xxx.*"}) 

@Configuration
@ComponentScan(basePackages = "com.xxx.xxx.*")
@ImportResource (value = {"classpath:xxx.xml"})
public class AppConfig { 
....
}

10. 使用 Spring EL

${… }代表占位符
#{… }代表启用 Spring 表达式
T(… )代表的是引入类:
@Value (” #( beanName .str ? . toUpperCase ()} ” )
这里的 beanName Sprin IoC 容器 Bean 的名称 str 是其属性
? 是否为空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值