1、导入jar包:4 + 1 --> beans/core/context/expression + commons-logging
2、编写目标类:dao 和 service
3、spring配置文件 IoC:<bean id="" class=""></bean> DI:<bean><property name="" value="" | ref=""></property></bean>
实例化方式: 默认构造 静态工厂:<bean id="" class="工厂类全限定类名" factory-method="静态方法名称"></bean> 实例工厂:<bean id="工厂的id" class="工厂类"></bean> <bean id="" factory-bean="工厂的id" factory-method="方法名称"></bean>
作用域:<bean id="" class="" scope="singleton | prototype"></bean>
生命周期:<bean id="" class="" init-method="" destroy-method=""></bean> 后处理bean:实现BeanPostProcessor接口,<bean class="后处理的实现类的全类名"></bean>,对容器中所有的bean都生效。
属性注入: 构造方法注入:<bean><constructor-arg index="" type=""></bean> setter方法注入:<bean><property name="" value="" | ref=""></bean></bean> p命名空间:简化<property> 格式:<bean p:属性名="普通值" p:属性名-ref="引用值"></bean> 注意:使用p命名空间需要先声明命名空间。 SpEL:<property name="" value="#{表达式}"> #{123} #{'abc'} #{beanId.propName?.methodName()} #{T(类).静态方法|字段} 集合注入 数组 <array> ...</array> List <list>...<list> Set <set>...<list> Map <map><entry key="" value=""></entry>...</map> Properties <props><prop key=""></prop>...</props>
4、核心api BeanFactory,延迟实例化bean,第一次调用getBean(); 时才会初始化Bean。 ApplicationContext 一般常用,功能更强,采取非延时加载,当配置文件被加载时,就进行对象的实例化。 ClassPathXmlApplicationContext 加载classpath中的xml文件 FileSystemXmlApplicationContext 加载指定盘符的文件,ServletContext.getRealPath()
5、使后处理bean 只对一个<bean>生效
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 使后处理bean 只对一个<bean>生效
if("userServiceId".equals(beanName)) {
System.out.println("执行了前方法:" + beanName);
}
return bean;
}
6、注解 1、先配置扫描含有注解的类 <context:component-scan base-package="...."> 2、常见的注解 @Component 组件,注入任意bean WEB @Controller web层 @Service service层 @Repository dao层 注入字段或setter方法 普通值:@Value 引用值: 按类型:@Autowired 按名称1:@Autowired @Qualifier("名称") 按名称2:@Resource("名称") 作用域:@Scope("prototype") 生命周期: 初始化:@PostConstruct 销毁方法:@PreDestroy
7、注解和xml混合使用 1.将所有的bean都配置xml中 <bean id="" class=""></bean> 2.将所有的依赖都使用注解 @Autowired 默认不生效。为了生效,需要在xml配置:<context:annotation-config>
总结: 注解1:<context:component-scan base-package=" "> 注解2:<context:annotation-config> 1、一般情况两个注解不一起使用。 2、 “注解1”扫描含有注解(@Component 等)类,注入的注解自动生效。 “注解2”只在xml和注解(注入)混合使用时,使注入的注解生效。