一.核心思想
IOC:控制反转
控制反转:使用对象时,从主动的new对象转化为IOC容器去提供对象,被创建和管理的对象在IOC容器中被统称为“bean”。
IOC容器:可以管理service和dao,可以将有依赖关系的bean进行关系绑定也叫依赖注入 (DI)。
目标:充分解耦
二.使用spring
1.用maven在pom中导入spring的坐标
2.在resources中编写配置项
3.配置bean
<bean id="这个bean的名称,自己取" class="给bean定义类型,此处填类型的路径" /bean>
3.1配置两个bean的依赖关系
<bean id="bean1" class = "xxx" /bean>
<bean id="bean2" class = "xxx" >
//property标签表示配置当前bean的属性,name表示配置哪一个具体的属性,ref属性表示参照哪一个bean
<property name="此处是set方法里面的变量名" ref="bean1">
</bean>
3.2 bean起别名:多个别名中可以用逗号,空格,分号分隔
<bean id="bean的名字" name="bean的别名1 bean的别名2 ..." class="bean的类型,即bean类型的路径">
3.3 bean中的单例对象和非单例对象怎么配置(bean的作用范围)
在配置xml中定义bean时,加上scope="prototype" prototype:非单例 ; singleton:单例
如:
<bean id="bean2" class = "xxx" scope="prototype">
单例模式:两次getbean时地址均是一样的。
非单例模式:多次getbean时地址不是一样的
3.4 bean的生命周期
定义初始化方法和结束方法,在bean中配置上对应的初始化方法和结束方法。
如:<bean id="xxx" class="xxx" init-method="定义的初始化方法" destroy="定义的结束方法" /bean>
4.依赖注入方式:
1.setter注入:1.1简单类型 ;1.2引用类型
2.构造器注入: 1.1简单类型;1.2 引用类型
构造器注入:
在实现类中提供一个构造方法用来传值。
在bean配置中构造器注入格式(引用类型的):
<bean id ="xx" class="xxx">
<constructor-arg name="构造方法中的形参" ref="构造方法的类型"/>
</bean>
简单类型的:
<bean id ="xx" class="xxx">
<constructor-arg name="构造方法中的形参" value="要给改类型传的值"/>
</bean>
数组集合的注入:
<bean id="xxx" class="xxx">
<property name="注入的类型:集合,数组等 如:array"
<array>
<value></value>
</array>
</property>
<property name="list"
<list>
<value></value>
</list>
</property>
</bean>
Spring加载properties配置文件:
如:
ioc容器总结:
注解开发:
注解开发定义bean:
第一步:@Component("要配置的bean的名称,可以理解为id") :定义bean的注解,放在对应的类型上面。
第二步:核心配置文件通过组件扫描bean
<context: component-scan base-package="bean定义的路径"/>
@Component中又衍生出:@Service业务层 @Repository数据层 @Controller表现层
这三个注解作用和Component的作用一样,只是为了方便理解。
纯注解开发:
@Configuration :配置类注解,用于设定当前类为配置类
@ComponentScan :扫描Component文件的注解,用于设置扫描路径,只能添加一次,多个数据用数组格式
@Scope("xx"):切换bean的单例,非单例模式
bean的生命周期:
@PostConstruct:在构造方法后运行
@PreDestroy:在容器销毁前运行
@Autowired:自动装配,会自动根据类型或者名字自动装配
@Qualifier("注入的对象的名称"):指定名称注入 注:该注解依赖于@Autowired注解,不能单独使用。
@Value(""):简单类型的注入,放在简单类型的上面。
@PropertySource("要加载的properties配置文件"):写在配置类上,可以使用{}来取值,在加载多个配置文件的时候使用数组格式,也就是{配置文件a,配置文件b,配置文件c}
管理第三方bean管理:
定义一个管理的对象,然后手动写配置,然后将方法的返回值声明为bean。
@Bean("bean的名称"):添加一个bean,将该方法的返回值声明为bean
@Impoet(xxx配置类.class):导入其它配置类,导入多个配置了要使用{}