第一部分
1.创建Ioc容器对象
①.从类路径获取Spring配置文件,从而获取Ioc容器对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-di.xml");
②.从文件系统获取Spring配置文件,从而获取Ioc容器对象
ApplicationContext ctx=new FileSystemXmlApplicationContext("E:\\idea2018.1\\Spring1\\src\\beans-di.xml");
2.依赖注入的方式
①.属性注入
- 使用属性注入需要空参构造器
- 以及对应属性的set方法
②.构造方法注入 - 需要有对应的构造器
可以根据index指定参数顺序
可以指定参数类型
顺序类型可以混合使用
3.从Ioc容器中获取Bean
<bean id="user" class="text.user">
<property name="name" value="Spring"></property>
</bean>
①.通过Bean的id获取
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
user user = (text.user) applicationContext.getBean("user");
②.通过运行时类获取(Ioc容器中有多个该运行时类对应的Bean时会出异常)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
user user = (text.user) applicationContext.getBean(text.user.class);
第二部分
注:为级联属性赋值,操作的该Bean中的属性,上图是操作的该bean中的属性book
结果
student1{id=1, name=‘无’, books=[Book{bookName=‘游戏指南’, price=35.0}, Book{bookName=‘java学习手册’, price=35.0}, Book{bookName=‘c语言’, price=58.0}]}
结果
student2{id=1, name=‘无’, bookMap={book1=Book{bookName=‘游戏指南’, price=35.0}, book2=Book{bookName=‘java学习手册’, price=35.0}}}
DataSouce类
只有 private Properties properties;属性,已经对应的构造器,get,set,toString方法,空构造器
student{id=1, name=‘李明’, list=[Book{bookName=‘游戏指南’, price=35.0}, Book{bookName=‘java学习手册’, price=35.0}]}
补充
1.
2.
这样写是一个Properties对象注入多个值
这样写是多个属性对象分别注入一个值
第三部分
1.autowire
2.继承Bean(Bean所对应的类也需要继承关系或所对应的是同一个类的不同Bean),抽象Bean,依赖Bean
如果在Ioc容器中没有依赖的bean,则会出异常
3.Bean的作用域
4.使用外部配置文件
未使用属性配置文件
导入类路径下的属性配置文件
使用类路径下的配置文件
5.SpEl
第四部分
1.Bean的生命周期方法
init-method=“init1” destroy-method=“destory”
在bean初始化时调用Bean的init1()方法,销毁时调用destory()方法
2.Bean的后置处理器
3.通过工厂配置Bean
①.通过静态工厂方法配置Bean
②.通过实例工厂方法配置Bean
③.FactoryBean配置
package factoryBean;
mport org.springframework.beans.factory.FactoryBean;
public class carFactoryBean implements FactoryBean<Car> {
private String brand;
public carFactoryBean(String brand) {
this.brand = brand;
}
public carFactoryBean() {
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
/**
* 返回Bean的对象
*/
@Override
public Car getObject() throws Exception {
return new Car(brand,500000);
}
/**
* 返回Bean的类型
* @return
*/
@Override
public Class<?> getObjectType() {
return null;
}
**
* 是否为单实例
* @return
*/
@Override
public boolean isSingleton() {
return true;
}
}
4.通过注解配置Bean
①.初步使用
- 标识组件的名称
- 没有标识则默认使用类名(第一个字母小写)
②.筛选扫描
- 按注解筛选用annotation
- 按类名用assignable同理
③.使用@Autowired注解自动装配Bean
- 使用方式:@Autowired放在对应的属性或者set方法上,或者加在形参前面
- 使用@Autowired自动装配时
当Ioc容器中存在多个需装配类型的Bean时,
默认根据对应的set方法或者该属性所对应的类或接口的名字(首字母小写)来进行装配,若Ioc容器中找不到,则会报异常
此时我们可以根据补充注解@Qualifier进行指定需要装配该类型的那个Bean
eg:
@Autowired
@Qualifier(“userRepositoryImpl2”)
private UserRepository userRepository;
指定装配UserRepository类型,组件名称为userRepositoryImpl2的Bean
④.泛型依赖注入