目录
1.@Configuration
说明:把一个类作为一个loC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
代码演示:
Student实体类
@Data
public class Student {
private String name;
private Integer age;
public Student() {
}
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
}
@Configuration注解使用
@Configuration
public class MyConfigura {
//默认是方法名
//指定value 则以value为准
@Bean("stu")
public Student student() {
return new Student("ws", 18);
}
}
Test:
@Test
public void Test1() {
ApplicationContext app = new AnnotationConfigApplicationContext(MyConfigura.class);
// Object bean = app.getBean(Student.class);
Object bean = app.getBean("stu");
System.out.println(bean);
}
2.@ComponentScan
说明:在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的<context:component-scan>
默认扫描(@Controller、@Service、@Repostory、@Component)
@ComponentScan的重要属性:
代码演示:
配置类:
@Configuration
@ComponentScan(value = "com.ws.project" )
public class MyConf {
}
Test:
@Test
public void Test2() {
ApplicationContext app = new AnnotationConfigApplicationContext(MyConf.class);
String[] beanDefinitionNames = app.getBeanDefinitionNames();
System.out.println(Arrays.toString(beanDefinitionNames));
}
3.@Scope
说明:用于指定scope作用域的(用在类上)
Scope的value属性:
- prototype原型,多例
- singleton单例
- request主要应用于web模块同一次请求只创建一个实例
- session主要应用于web模块,同一个session只创建一个对象
默认是单例
4.@Lazy
说明:表示延迟初始化(就是只有当我们调用bean的时候,这个bean才会被初始化)
@Lazy只对单例bean起作用
5.@Conditional
说明:Spring4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册Bean。
属性是实现了Conditional接口的类
6.@Import
说明:导入外部资源
可以手动的把一个类加入到容器中
- a.Import直接参数导入
- b.实现工mportselector自定义规则实现
- c.实现ImportBeanDefinitionRegistrar,获得BeanDefinitionRegistry可以手动直接往Ioc容器中塞
import加入的bean是全类名
7.给Ioc容器注册Bean的方式
- @Bean直接导入单个类
- @ComponentScan 默认扫描(@Controller.@Service、@Repostory、@Component)
- @Import快速给容器导入Bean的方式
- FactoryBean把需要注册的对象封装为FactoryBean
FactoryBean负责将Bean注册到IoC的
BeanBeanFactory 是从IoC容器中获得Bean对象的
8.Bean生命周期控制
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn :定义Bean初始化及销毁时的顺序
Bean生命周期的监控实现方式
- 配置@Bean的参数
- 分别实现InitializingBean和DisposableBean接口
- 使用@PostConstruct和@PreDestroy注解
- 自己写一个类,实现BeanPostProcessor接口(这种方式可以获取所有的bean)